Estou usando um aplicativo (MapServer - http://mapserver.org/ ) que agrupa instruções SQL, para que a instrução ORDER BY esteja na consulta interna. Por exemplo
SELECT * FROM (
SELECT ID, GEOM, Name
FROM t
ORDER BY Name
) as tbl
O aplicativo possui muitos drivers de banco de dados diferentes. Eu uso principalmente o driver do MS SQL Server e o SQL Server 2008. Isso gera um erro se um ORDER BY for encontrado em uma subconsulta.
No MS Docs (embora isso seja para o SQL Server 2000, ainda parece se aplicar):
Quando você usa uma cláusula ORDER BY em uma exibição, uma função embutida, uma tabela derivada ou uma subconsulta, ela não garante a saída ordenada. Em vez disso, a cláusula ORDER BY é usada apenas para garantir que o conjunto de resultados gerado pelo operador Top tenha uma composição consistente. A cláusula ORDER BY garante apenas um conjunto de resultados ordenados quando é especificado na instrução SELECT mais externa.
No entanto, o mesmo tipo de consulta, quando executado no Postgres (9) e no Oracle, retorna resultados - com a ordem definida na subconsulta. No Postgres, o plano de consulta mostra que os resultados são classificados e as notas de versão do Postgres incluem o item que implica que ordens de subconsulta sejam usadas:
Evitar classificação quando a subconsulta ORDER BY corresponde à consulta superior
http://en.wikipedia.org/wiki/Order_by afirma:
Embora alguns sistemas de banco de dados permitam a especificação de uma cláusula ORDER BY em sub-seleções ou exibições de definições, a presença não tem efeito.
No entanto, a partir da minha própria verificação dos planos de consulta:
- O SQL Server 2008 não oferece suporte a ORDER BY em uma subconsulta
- O Postgres 9 suporta ORDER BY em uma subconsulta
- O Oracle 10g suporta ORDER BY em uma subconsulta
Portanto, minha pergunta existe algum link que possa confirmar ou negar oficialmente que o Postgres e o Oracle não permitem a classificação em uma subconsulta?
ORDER BY
a subconsulta como redundante e não a classificação desnecessária.