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
WHEREcláusula diferente deIS NULL/IS NOT NULLfaria qualquerLEFT JOINnesta 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 BYpara 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 BYtambémORDER BYos 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.