No, esto está bien. Este es solo uno de los raros casos en los que desea utilizar DISTINCT palabra clave para eliminar duplicados.
En este caso esto se justifica por el hecho de que la lógica de la consulta es correcta, aunque devuelva más de una fila. Muchas veces uno puede ver el uso de DISTINCT cuando en realidad la lógica de la consulta es incorrecta.
Nota al margen:
- cualquier filtro en una referencia de tabla que esté usando en
WHEREcláusula que no seaIS NULL/IS NOT NULLharía cualquierLEFT JOINen esta misma referencia de tabla, cambie aINNER JOIN, en cuanto al comportamiento final del conjunto de resultados. (ver esto:https://stackoverflow.com/a/15483895/1291428 ) -
no deberías usar
GROUP BYpara simular el efecto deDISTINCT, por 2 razones:1/ Este no es el propósito. Uno de los efectos de
GROUP BYes eliminar duplicados, pero su objetivo principal es agrupar filas de acuerdo con un determinado conjunto de criterios, para poder aplicarles algunos cálculos/operaciones analíticas.2/
GROUP BYtambiénORDER BYlos resultados (en mysql), que no es necesariamente lo que desea y en ese caso ralentiza la ejecución. Por favor, solo asegúrese de hacer un uso adecuado de lo que proporcionan los motores, eso siempre es mejor desde el punto de vista de la compatibilidad futura. (anticipando que lo que incluye como concedido en realidad no lo es)
saludos.