O
Row_Number() OVER (ORDER BY (SELECT 1))
truque deve NÃO ser visto como uma maneira de evitar a alteração da ordem dos dados subjacentes. É apenas um meio de evitar que o servidor execute uma classificação adicional e desnecessária (ele ainda pode realizar a classificação, mas custará o mínimo possível quando comparado à classificação por coluna). Todas as consultas no servidor SQL ABSOLUTAMENTE DEVEM tem um
ORDER BY
cláusula na consulta mais externa para que os resultados sejam ordenados de maneira confiável e de maneira garantida. O conceito de "manter a ordem original" não existe em bancos de dados relacionais. Tabelas e consultas devem sempre ser consideradas não ordenadas até e a menos que um
ORDER BY
cláusula é especificada na consulta mais externa. Você pode tentar a mesma consulta não ordenada 100.000 vezes e sempre recebê-la com a mesma ordenação e, assim, acreditar que pode confiar nessa ordenação. Mas isso seria um erro, porque um dia, algo vai mudar e não terá a ordem que você espera. Um exemplo é quando um banco de dados é atualizado para uma nova versão do SQL Server - isso fez com que muitas consultas alterassem sua ordem. Mas não precisa ser uma mudança tão grande. Algo tão pequeno quanto adicionar ou remover um índice pode causar diferenças. E mais:Instalando um service pack. Particionando uma tabela. Criando uma exibição indexada que inclui a tabela em questão. Alcançar algum ponto de inflexão onde uma varredura é escolhida em vez de uma busca. E assim por diante.
Não confie em resultados a serem ordenados a menos que você tenha dito "Servidor,
ORDER BY
".