За да отговорите на този въпрос, погледнете плановете за заявки, създадени от двамата.
Първият SELECT е просто сканиране на таблица, което означава, че произвежда редове в реда на разпределение. Тъй като това е нова таблица, тя съответства на реда, в който сте въвели записите.
Вторият SELECT добавя GROUP BY, който SQL Server прилага чрез отделно сортиране, тъй като изчисленият брой редове е толкова нисък. Ако трябваше да имате повече редове или да добавите агрегат към вашия SELECT, този оператор може да се промени.
Например опитайте:
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
Поради броя на редовете това се променя в хеш агрегат и сега няма сортиране в плана на заявката.
Без ORDER BY SQL Server може да върне резултатите във всякакъв ред, а редът, в който се връща, е страничен ефект от начина, по който смята, че може най-бързо да върне данните.