Um programador está testando e comparando o mesmo aplicativo que usa a mesma estrutura de banco de dados e os mesmos dados, apenas em dois bancos de dados separados, um com Oracle 8 e outro com Oracle 9.
O aplicativo executa uma consulta sem ORDER BY
cláusula.
Ele afirma que a consulta ORDER-BY-less deve retornar as linhas na mesma ordem nos dois bancos de dados.
Digo a ele que não há garantia da mesma ordem de linha, a menos que você forneça explicitamente uma cláusula ORDER BY.
O banco de dados tem os mesmos índices e chaves. Mas o plano de explicação mostra que em um dos bancos de dados o mecanismo está usando a chave de uma das tabelas unidas, enquanto no outro banco de dados está usando o de outra.
Ele insinua que os dois ambientes de banco de dados não são iguais, o que ocorre porque eles têm estatísticas diferentes, diferentes mecanismos de rdbms, etc., mas não porque eu não consegui replicar todos os índices do banco de dados original.
Digo a ele que ele deve explicitamente fornecer uma ORDER BY
cláusula se a ordem for realmente tão importante.
A questão
Para que eu possa explicar melhor:
Em que ordem uma consulta busca linhas quando você não fornece explicitamente uma cláusula ORDER BY e por que essa consulta não retorna as linhas na mesma ordem?