Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

La clause OrderBy génère différents ensembles de résultats lorsque la colonne de commande contient les mêmes données

C'est "à dessein"

SQL Server (ou tout SGBDR) ne garantit pas que les résultats seront renvoyés dans un ordre particulier si aucun ORDER BY clause a été précisée. Certaines personnes pensent que les lignes sont toujours renvoyées dans l'ordre des index clusterisés ou dans l'ordre des disques physiques si aucune clause order by n'est spécifiée. Cependant, cela est incorrect car de nombreux facteurs peuvent modifier l'ordre des lignes lors du traitement de la requête. Une jointure HASH parallèle est un bon exemple pour un opérateur qui modifie l'ordre des lignes.

Si vous spécifiez un ORDER BY clause, SQL Server trie les lignes et les renvoie dans l'ordre demandé. Cependant, si cet ordre n'est pas déterministe parce que vous avez des valeurs en double, dans chaque "groupe de valeurs", l'ordre est "aléatoire" pour les mêmes raisons que celles mentionnées ci-dessus.

La seule façon de garantir un ordre déterministe est d'inclure une colonne ou un groupe de colonnes unique garanti (par exemple la clé primaire) dans le ORDER BY clause.