sql >> Base de Datos >  >> RDS >> Sqlserver

La cláusula OrderBy genera diferentes conjuntos de resultados cuando la columna de pedido tiene los mismos datos

Esto es "por diseño"

SQL Server (o cualquier RDBMS) no garantiza que los resultados se devuelvan en un orden particular si no ORDER BY se especificó la cláusula. Algunas personas piensan que las filas siempre se devuelven en orden de índice agrupado o en orden de disco físico si no se especifica la cláusula order by. Sin embargo, eso es incorrecto ya que hay muchos factores que pueden cambiar el orden de las filas durante el procesamiento de la consulta. Una unión HASH paralela es un buen ejemplo de un operador que cambia el orden de las filas.

Si especifica un ORDER BY cláusula, SQL Server ordenará las filas y las devolverá en el orden solicitado. Sin embargo, si ese orden no es determinista porque tiene valores duplicados, dentro de cada "grupo de valores" el orden es "aleatorio" por las mismas razones mencionadas anteriormente.

La única forma de garantizar un orden determinista es incluir una columna o un grupo de columnas único garantizado (por ejemplo, la clave principal) en ORDER BY cláusula.