На основании данных и простых запросов оба будут возвращать одинаковые результаты. Тем не менее, основные операции очень разные.
DISTINCT
, как указывал AakashM, применяется к всем значениям столбцов, включая значения из подвыборов и вычисленных столбцов. Все, что DISTINCT
делает, это удаляет дубликаты, основанные на всех задействованных столбцах, из видимости . Вот почему это обычно считается хаком, потому что люди будут использовать его, чтобы избавиться от дубликатов, не понимая, почему запрос возвращает их в первую очередь (потому что они должны использовать IN
или EXISTS
вместо объединения, как правило, ). PostgreSQL является единственной базой данных, о которой я знаю, с предложением DISTINCT ON
, которая работает так, как, вероятно, и предполагал OP.
Предложение GROUP BY
отличается - оно в основном используется для группировки для точного использования функции агрегирования. Для сервера этой функции значения столбцов будут уникальными в зависимости от того, что определено в предложении GROUP BY. Этот запрос никогда не будет нуждаться в DISTINCT, потому что интересующие значения уже уникальны.
Заключение
Это плохой пример, потому что он изображает DISTINCT и GROUP BY как равные, когда они не.