Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

La clausola OrderBy risulta in set di risultati diversi quando la colonna dell'ordine ha gli stessi dati

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.