SQL vs MySQL: Regras sobre operações agregadas e GROUP BY

Emeste livro No momento, estou lendo enquanto estou seguindo um curso sobre bancos de dados, o seguinte exemplo de uma consulta ilegal usando um operador agregado é fornecido:

Encontre o nome e a idade do marinheiro mais velho.

Considere a seguinte tentativa de responder a esta consulta:

SELECT S.sname, MAX(S.age)
FROM Sailors S

A intenção é que essa consulta retorne não apenas a idade máxima, mas também o nome dos marinheiros com essa idade. No entanto, essa consulta é ilegal no SQL - se a cláusula SELECT usa uma operação agregada, ela deve usarsó operações agregadas, a menos que a consulta contenha uma cláusula GROUP BY!

Algum tempo depois, ao fazer um exercício usando o MySQL, enfrentei um problema semelhante e cometi um erro semelhante ao mencionado. No entanto, o MySQL não reclamou e apenas cuspiu algumas tabelas que mais tarde acabaram não sendo o que eu precisava.

A consulta acima é realmente ilegal em SQL, mas legal no MySQL, e se sim, por que isso? Em que situação seria necessário fazer tal consulta?

Mais elaboração da pergunta:

A questão não é se todos os atributos mencionados em um SELECT devem ou não ser mencionados em um GROUP BY. É por isso que a consulta acima, usando atributos juntamente com operações agregadas em atributos, sem qualquer GROUP BY, é legal no MySQL.

Vamos dizer que a mesa dos marinheiros ficou assim:

+----------+------+
| sname    | age  |
+----------+------+
| John Doe |   30 |
| Jane Doe |   50 |
+----------+------+

A consulta retornaria:

+----------+------------+
| sname    | MAX(S.age) |
+----------+------------+
| John Doe |         50 |
+----------+------------+

Agora quem precisaria disso? John Doe não é 50, ele é 30! Como dito na citação do livro, esta é uma primeira tentativa de obter o nome e a idade do marinheiro mais velho, neste exemplo, Jane Doe aos 50 anos.

O SQL diria que esta consulta é ilegal, mas o MySQL apenas procede e cospe "lixo". Quem precisaria desse tipo de resultado? Por que o MySQL permite essa pequena armadilha para recém-chegados?

questionAnswers(4)

yourAnswerToTheQuestion