Questo è "in base alla progettazione"
SQL Server (o qualsiasi RDBMS) non garantisce che i risultati vengano restituiti in un ordine particolare se non ORDER BY
è stata specificata la clausola. Alcune persone pensano che le righe vengano sempre restituite nell'ordine dell'indice cluster o nell'ordine del disco fisico se non viene specificata alcuna clausola order by. Tuttavia, ciò non è corretto poiché esistono molti fattori che possono modificare l'ordine delle righe durante l'elaborazione della query. Un join HASH parallelo è un buon esempio per un operatore che modifica l'ordine delle righe.
Se specifichi un ORDER BY
clausola, SQL Server ordinerà le righe e le restituirà nell'ordine richiesto. Tuttavia, se quell'ordine non è deterministico perché hai valori duplicati, all'interno di ogni "gruppo di valori" l'ordine è "casuale" per gli stessi motivi sopra menzionati.
L'unico modo per garantire un ordine deterministico è includere una colonna o un gruppo di colonne univoci garantiti (ad esempio la chiave primaria) nel ORDER BY
clausola.