Sorpresa - se trata de una consulta perfectamente válido en MySQL:¿Por qué MySQL permite consultas de "grupo por" SIN funciones agregadas?
select X, Y from someTable group by X
Si ha intentado esta consulta en Oracle o SQL Server, se obtendría el mensaje de error natural:
Column 'Y' is invalid in the select list because it is not contained in
either an aggregate function or the GROUP BY clause.
Entonces, ¿cómo ¿MySQL determina qué Y mostrar para cada X? Solo elige uno. Por lo que puedo decir, solo elige la primera Y que encuentra. La racionalidad es que, si Y no es una función agregada ni en la cláusula group by, entonces especificar "select Y" en su consulta no tiene sentido para empezar. Por lo tanto, como motor de base de datos devolveré lo que quiera, y te gustará.
Incluso hay un parámetro de configuración MySQL para desactivar esta "holgura". http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by
Este artículo incluso menciona cómo MySQL ha sido criticado por ser ANSI-SQL no conforme a este respecto. http://www.oreillynet.com/databases/blog/2007/05/debunking_group_by_myths.html
Mi pregunta es: ¿Por qué fue MySQL diseñado de esta manera? ¿Cuál fue su razón de ser para romper con ANSI-SQL?
Déjame ponerlo de esta manera. Veo que esta elección de diseño es equivalente a un lenguaje de programación que elige permitir e ignorar, por ejemplo, dejar que "nulo" sea un valor del lado izquierdo. p.ej. "null = 3". Simplemente no hay razón para dejar que eso suceda. Es el tipo de error que siempre y peligrosamente está mal. –
@lumpynose, tonterías, que pueden haber sido ciertas antes 5.x – Johan
@lumpynose ¿Puedes dar una referencia a tu afirmación? – Barranka