Все ответы выше верны, для случая 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 является общим ключевым словом в этом смысле.
Таким образом, люди, с которыми вы должны быть осторожны, чтобы не принимать приведенные выше ответы как правильные для всех случаев ... Вы можете запутаться и получить неправильные результаты, в то время как все, что вам нужно, это оптимизировать!