Все ответы выше верны, для случая DISTINCT в одном столбце против GROUP BY в одном столбце.
Каждый механизм БД имеет свою собственную реализацию и оптимизацию, и если вы заботитесь об очень небольшой разнице (в большинстве случаев), то вам придется тестировать на конкретном сервере и конкретной версии! Как реализации могут измениться ...
НО, если вы выберете более одного столбца в запросе, тогда DISTINCT существенно отличается! Потому что в этом случае он будет сравнивать ВСЕ столбцы всех строк, а не только один столбец.
Так что если у вас есть что-то вроде:
// This will NOT return unique by [id], but unique by (id,name)
SELECT DISTINCT id, name FROM some_query_with_joins
// This will select unique by [id].
SELECT id, name FROM some_query_with_joins GROUP BY id
Распространенной ошибкой является мысль, что ключевое слово DISTINCT различает строки по первому указанному вами столбцу, но DISTINCT является таким общим ключевым словом.
Итак, люди, с которыми вам следует быть осторожными, чтобы не принимать приведенные выше ответы как правильные для всех случаев ... Вы можете запутаться и получить неверные результаты, в то время как все, что вам нужно, - это оптимизировать!