След малко ровене мога да потвърдя и двата ви сценария:
MySQL 5.1 прилага ORDER BY вътре в подзаявката.
MariaDB 5.5.39 на Linux не приложете ORDER BY вътре в подзаявката, когато няма LIMIT се доставя. Това прави обаче правилно приложете реда при съответен LIMIT се дава:
SELECT t2.Code
FROM (
SELECT Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2
) AS t2;
Без този LIMIT , няма основателна причина да се прилага сортирането в подзаявката. Може да се приложи еквивалентно към външната заявка.
Документирано поведение:
Както се оказа, MariaDB е документирала това поведение и не се счита за грешка:
„Таблица“ (и подзаявка в
FROMклауза също) е - според стандарта SQL - неподреден набор от редове. Редове в таблица (или в подзаявка вFROM). клауза) не идват в конкретен ред. Ето защо оптимизаторът може да игнорираORDER BYклауза, която сте посочили. Всъщност стандартът на SQL дори не позволяваORDER BYклауза да се появи в тази подзаявка (позволяваме го, защотоORDER BY ... LIMIT... променя резултата, набора от редове, а не само техния ред).Трябва да третирате подзаявката в
FROMклауза, като набор от редове в някакъв неопределен и недефиниран ред и поставетеORDER BYна най-високо нивоSELECT.
Така че MariaDB също препоръчва прилагането на ORDER BY в най-външната заявка или LIMIT ако е необходимо.
Забележка:В момента нямам достъп до подходящ MySQL 5.5 или 5.6, за да потвърдя дали поведението е същото там (и SQLFiddle.com работи неправилно). Коментари на оригиналния доклад за грешка (затворен като не-бъг) предполагат, че MySQL 5.6 вероятно се държи по същия начин като MariaDB.