För att svara på den här frågan, titta på frågeplanerna som produceras av båda.
Den första SELECT är en enkel tabellskanning, vilket innebär att den producerar rader i allokeringsordning. Eftersom det här är en ny tabell matchar den den ordning du infogade posterna.
Den andra SELECT lägger till en GROUP BY, som SQL Server implementerar via en distinkt sortering eftersom det uppskattade radantalet är så lågt. Om du skulle ha fler rader eller lägga till ett aggregat i ditt SELECT, kan denna operator ändras.
Försök till exempel:
CREATE TABLE #Values ( FieldValue varchar(50) )
;WITH FieldValues AS
(
SELECT '4' FieldValue UNION ALL
SELECT '3' FieldValue UNION ALL
SELECT '2' FieldValue UNION ALL
SELECT '1' FieldValue
)
INSERT INTO #Values ( FieldValue )
SELECT
A.FieldValue
FROM FieldValues A
CROSS JOIN FieldValues B
CROSS JOIN FieldValues C
CROSS JOIN FieldValues D
CROSS JOIN FieldValues E
CROSS JOIN FieldValues F
SELECT
FieldValue
FROM #Values
GROUP BY
FieldValue
DROP TABLE #Values
På grund av antalet rader ändras detta till ett hashaggregat, och nu finns det ingen sortering i frågeplanen.
Utan ORDER BY kan SQL Server returnera resultaten i valfri ordning, och ordningen den kommer tillbaka i är en bieffekt av hur den tror att den snabbast kan returnera data.