Todas as respostas acima estão corretas, no caso de DISTINCT em uma única coluna vs GROUP BY em uma única coluna. Todo mecanismo db tem sua própria implementação e otimizações, e se você se preocupa com a pouca diferença (na maioria dos casos), precisa testar contra um servidor específico E uma versão específica! Como as implementações podem mudar ...
MAS, se você selecionar mais de uma coluna na consulta, o DISTINCT será essencialmente diferente! Porque neste caso, ele comparará TODAS as colunas de todas as linhas, em vez de apenas uma coluna.
Então, se você tem algo como:
// 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
É um erro comum pensar que a palavra-chave DISTINCT distingue linhas pela primeira coluna especificada, mas a DISTINCT é uma palavra-chave geral dessa maneira.
Portanto, as pessoas precisam ter cuidado para não aceitar as respostas acima como corretas para todos os casos ... Você pode ficar confuso e obter resultados errados enquanto tudo o que queria era otimizar!