¿Cómo determinar qué es más efectivo: DISTINCT o WHERE EXISTS?

Por ejemplo, tengo 3 tablas:user, group ypermissiony dos muchas relaciones entre ellos:user_groups ygroup_permissions.

Necesito seleccionar todos los permisos de un usuario determinado, sin repeticiones. Cada vez que encuentro un problema similar, no puedo determinar qué versión de una consulta es mejor:

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 

Tengo la experiencia suficiente para sacar conclusiones basadas en explicar. La primera consulta tiene subconsulta, pero mis experiencias han demostrado que la primera consulta es más rápida. Tal vez debido a la gran cantidad de permisos filtrados en el resultado.

¿Qué haría usted en esta situación? ¿Por qué? ¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta