Como determinar o que é mais eficaz: DISTINCT ou WHERE EXISTS?

Por exemplo, tenho 3 tabelas:user, group epermissione dois muitos relacionamentos entre eles:user_groups egroup_permissions.

Eu preciso selecionar todas as permissões de determinado usuário, sem repetições. Toda vez que encontro um problema semelhante, não consigo determinar qual versão de uma consulta é melhor:

SELECT permisson_id FROM group_permission WHERE EXISTS(
    SELECT 1 FROM user_groups 
        WHERE user_groups.user_id = 42 
          AND user_groups.group_id = group_permission.group_id
)

SELECT DISTINCT permisson_id FROM group_permission
    INNER JOIN user_groups ON user_groups.user_id = 42 
           AND user_groups.group_id = group_permission.group_id 

Eu tenho experiência suficiente para tirar conclusões baseadas em explicar. A primeira consulta tem subconsulta, mas minhas experiências mostraram que a primeira consulta é mais rápida. Talvez por causa do grande número de permissões filtradas no resultado.

o que você faria nesta situação? Por quê? Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion