Estou tentando escrever uma consulta eficiente para excluir blocos de dados. Para esse fim, esperava evitar uma varredura de índice usando a chave primária para obter os registros mais antigos. No entanto, estou vendo alguns resultados inesperados retornados.
eu esperava isso
SELECT TOP 15 OrderID FROM [Order]
Me daria os 15 registros mais antigos porque eu poderia confiar no incremento da chave primária e, portanto, a ordem de armazenamento seria baixa para alta na tabela.
No entanto, isso retorna um conjunto de resultados diferente
SELECT TOP 15 OrderID FROM [Order] ORDER BY DateCreated ASC
O que parece ser uma maneira mais precisa, mas mais cara, de obter o resultado de que preciso.
Confusamente, isso
SELECT TOP 15 * FROM [Order]
Fornece um conjunto diferente de OrderID s (PK) para este
SELECT TOP 15 OrderID FROM [Order]
Entendo que http://msdn.microsoft.com/en-gb/library/ms189463.aspx explica que o pedido não pode ser garantido sem uma cláusula ORDER BY, mas esperava que o PK fizesse o pedido para mim e não pode explicar as diferenças entre os duas últimas cláusulas selecionadas.