Чтобы ответить на этот вопрос, посмотрите на планы запросов, разработанные обоими.
Первый 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 может возвращать результаты в любом порядке, и порядок, в котором он возвращается, является побочным эффектом того, как он считает, что он может наиболее быстро вернуть данные.