この質問に答えるには、両方で作成されたクエリ プランを見てください。
最初の SELECT は単純なテーブル スキャンです。つまり、割り当て順に行が生成されます。これは新しいテーブルであるため、レコードを挿入した順序と一致します。
2 番目の 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 は任意の順序で結果を返すことができ、結果が返される順序は、データを最も迅速に返すことができると考える方法の副作用です。