Dies ist "absichtlich"
SQL Server (oder jedes andere RDBMS) garantiert nicht, dass Ergebnisse in einer bestimmten Reihenfolge zurückgegeben werden, wenn kein ORDER BY
vorhanden ist Klausel angegeben wurde. Einige Leute denken, dass die Zeilen immer in der Reihenfolge der gruppierten Indizes oder der physischen Festplatten zurückgegeben werden, wenn keine order by-Klausel angegeben ist. Dies ist jedoch falsch, da es viele Faktoren gibt, die die Zeilenreihenfolge während der Abfrageverarbeitung ändern können. Ein paralleler HASH-Join ist ein gutes Beispiel für einen Operator, der die Zeilenreihenfolge ändert.
Wenn Sie einen ORDER BY
angeben -Klausel sortiert SQL Server die Zeilen und gibt sie in der angeforderten Reihenfolge zurück. Wenn diese Reihenfolge jedoch nicht deterministisch ist, weil Sie doppelte Werte haben, ist die Reihenfolge innerhalb jeder "Wertgruppe" aus denselben oben genannten Gründen "zufällig".
Die einzige Möglichkeit, eine deterministische Reihenfolge zu garantieren, besteht darin, eine garantiert eindeutige Spalte oder Spaltengruppe (z. B. den Primärschlüssel) in ORDER BY
aufzunehmen Klausel.