Để trả lời câu hỏi này, hãy xem các kế hoạch truy vấn được tạo ra bởi cả hai.
SELECT đầu tiên là một lần quét bảng đơn giản, có nghĩa là nó tạo ra các hàng theo thứ tự phân bổ. Vì đây là một bảng mới nên nó khớp với thứ tự bạn đã chèn các bản ghi.
SELECT thứ hai thêm một GROUP BY, SQL Server thực hiện thông qua một sắp xếp riêng biệt vì số lượng hàng ước tính quá thấp. Nếu bạn có nhiều hàng hơn hoặc thêm tổng hợp vào CHỌN của mình, toán tử này có thể thay đổi.
Ví dụ:hãy thử:
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
Do số lượng hàng, điều này thay đổi thành tổng hợp băm và bây giờ không có sắp xếp trong kế hoạch truy vấn.
Không có ORDER BY, SQL Server có thể trả về kết quả theo bất kỳ thứ tự nào và thứ tự nó quay lại là một tác dụng phụ của cách nó cho rằng nó có thể trả lại dữ liệu nhanh nhất.