इस प्रश्न का उत्तर देने के लिए, दोनों द्वारा निर्मित क्वेरी योजनाओं को देखें।
पहला चयन एक साधारण टेबल स्कैन है, जिसका अर्थ है कि यह आवंटन क्रम में पंक्तियों का उत्पादन करता है। चूंकि यह एक नई तालिका है, यह आपके द्वारा रिकॉर्ड किए गए क्रम से मेल खाती है।
दूसरा SELECT एक GROUP BY जोड़ता है, जिसे SQL सर्वर एक अलग प्रकार के माध्यम से लागू करता है क्योंकि अनुमानित पंक्ति गणना इतनी कम है। यदि आपके पास अधिक पंक्तियां हों या अपने चयन में कुल जोड़ें, तो यह ऑपरेटर बदल सकता है।
उदाहरण के लिए, कोशिश करें:
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 सर्वर किसी भी क्रम में परिणाम लौटा सकता है, और जिस क्रम में वह वापस आता है वह इस बात का एक साइड-इफ़ेक्ट है कि यह कैसे सोचता है कि यह डेटा को सबसे तेज़ी से वापस कर सकता है।