(Explicando a perda de
ORDER BY ) O padrão SQL essencialmente diz que uma subconsulta é um conjunto não ordenado de linhas. Isso implica que o Optimizer é livre para ignorar o
ORDER BY na tabela 'derivada':FROM ( SELECT ... ORDER BY ) . Nas versões "recentes" do MySQL e do MariaDB, como ORDER BYs estão sendo descartados. Existem outros casos em que ORDER BY é ignorado. Em algumas situações (não tenho certeza sobre este), adicionando um
LIMIT 99999999 (número grande) após o ORDER BY engana o Otimizador para fazer o ORDER BY . No entanto, ainda é livre para ignorar a "ordem" mais tarde. Uma regra geral para MySQL:Evite subconsultas. (Há casos em que as subconsultas são mais rápidas, mas não as suas.)
Uma regra forte:você deve tem um
ORDER BY no mais externo se você quiser que os resultados sejam classificados. Se você adicionou
LIMIT 3 para a tabela derivada em sua primeira consulta, você obteria apenas CHARLES, DAVID, JAMES, mas não necessariamente nessa ordem . Ou seja, você precisaria de dois ORDER BYs - um na tabela derivada, um no final.