Não, isso é bom. Este é apenas um dos raros casos em que você deseja usar o
DISTINCT
palavra-chave para remover duplicatas. Nesse caso isso se justifica pelo fato da lógica da consulta estar correta, mesmo que retorne mais de uma linha. Muitas vezes pode-se ver o uso de
DISTINCT
quando na verdade a lógica da consulta está errada. Nota:
- qualquer filtro em uma referência de tabela que você está usando em
WHERE
cláusula diferente deIS NULL/IS NOT NULL
faria qualquerLEFT JOIN
nesta mesma referência de tabela, vire para umINNER JOIN
, quanto ao comportamento final do conjunto de resultados. (veja isto:https://stackoverflow.com/a/15483895/1291428 ) -
você não deve usarGROUP BY
para simular o efeito deDISTINCT
, por 2 motivos:
1/ Este não é o propósito. Um dos efeitos deGROUP BY
é eliminar duplicatas, mas seu principal objetivo é agrupar linhas de acordo com um determinado conjunto de critérios, a fim de aplicar alguns cálculos/operações analíticas sobre elas.
2/GROUP BY
tambémORDER BY
os resultados (no mysql), que não é necessariamente o que você quer e nesse caso atrasa a execução. Por favor, apenas assegure o uso apropriado do que os mecanismos estão fornecendo, isso é sempre melhor do ponto de vista da compatibilidade futura. (antecipando que o que você inclui como concedido na verdade não é)
Saudações.