Сюрприз - это вполне корректный запрос в MySQL:
select X, Y from someTable group by X
Если вы попробуете этот запрос в Oracle или SQL Server, вы получите естественное сообщение об ошибке:
Column 'Y' is invalid in the select list because it is not contained in
either an aggregate function or the GROUP BY clause.
Итак, как MySQL определяет, какой Y отображать для каждого X? Он просто выбирает одного. Насколько я могу судить, он просто выбирает первую Y, которую находит. Обоснование состоит в том, что если Y не является ни агрегатной функцией, ни предложением group by, то указание «выбрать Y» в вашем запросе не имеет смысла для начала. Следовательно, я как движок базы данных верну все, что захочу, и вам это понравится.
Есть даже параметр конфигурации MySQL, чтобы отключить эту «неплотность». http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by
В этой статье даже упоминается, как MySQL подвергался критике за несовместимость с ANSI-SQL в этом отношении. http://www.oreillynet.com/databases/blog/2007/05/debunking_group_by_myths.html
У меня вопрос: Почему был разработан MySQL именно таким образом? Что послужило причиной отказа от ANSI-SQL?