Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

A cláusula OrderBy está resultando em diferentes conjuntos de resultados quando a coluna de pedido tem os mesmos dados


Isso é "por design"

O SQL Server (ou qualquer RDBMS) não garante que os resultados sejam retornados em uma ordem específica se não houver ORDER BY cláusula foi especificada. Algumas pessoas pensam que as linhas são sempre retornadas na ordem do índice clusterizado ou na ordem do disco físico se nenhuma cláusula order by for especificada. No entanto, isso é incorreto, pois há muitos fatores que podem alterar a ordem das linhas durante o processamento da consulta. Uma junção HASH paralela é um bom exemplo para um operador que altera a ordem das linhas.

Se você especificar um ORDER BY cláusula, o SQL Server classificará as linhas e as retornará na ordem solicitada. No entanto, se essa ordem não for determinística porque você possui valores duplicados, dentro de cada "grupo de valores" a ordem é "aleatória" pelos mesmos motivos mencionados acima.

A única maneira de garantir uma ordem determinística é incluir uma coluna ou grupo de colunas exclusivo garantido (por exemplo, a Chave Primária) no ORDER BY cláusula.