Depois de pesquisar um pouco, posso confirmar os dois cenários:
MySQL 5.1 aplica o
ORDER BY dentro da subconsulta. MariaDB 5.5.39 no Linux não aplique o
ORDER BY dentro da subconsulta quando não há LIMIT é fornecida. Ele faz no entanto, aplique corretamente o pedido quando um LIMIT correspondente é dada:SELECT t2.Code
FROM (
SELECT Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2
) AS t2;
Sem esse
LIMIT , não há um bom motivo para aplicar a classificação dentro da subconsulta. Ele pode ser aplicado de forma equivalente à consulta externa. Comportamento documentado:
Acontece que MariaDB documentou esse comportamento e não é considerado um bug:
Uma "tabela" (e subconsulta noFROMcláusula também) é - de acordo com o padrão SQL - um conjunto não ordenado de linhas. Linhas em uma tabela (ou em uma subconsulta noFROMcláusula) não vêm em nenhuma ordem específica. É por isso que o otimizador pode ignorar oORDER BYcláusula que você especificou. Na verdade, o padrão SQL nem mesmo permite o comandoORDER BYcláusula apareça nesta subconsulta (nós permitimos, porqueORDER BY ... LIMIT... altera o resultado, o conjunto de linhas, não apenas sua ordem).
Você precisa tratar a subconsulta noFROMcláusula, como um conjunto de linhas em alguma ordem não especificada e indefinida, e coloque oORDER BYnoSELECTde nível superior .
Portanto, o MariaDB também recomenda aplicar o
ORDER BY na consulta mais externa ou um LIMIT se necessário. Nota:Atualmente, não tenho acesso a um MySQL 5.5 ou 5.6 adequado para confirmar se o comportamento é o mesmo (e o SQLFiddle.com está com defeito). Comentários sobre o relatório de bug original (fechado como não um bug) sugerem que o MySQL 5.6 provavelmente se comporta da mesma maneira que o MariaDB.