GROUP BY
mapeia grupos de linhas para uma linha, por valor distinto em específico colunas, que nem necessariamente precisam estar na lista de seleção. SELECT b, c, d FROM table1 GROUP BY a;
Esta consulta é SQL legal (correção: apenas no MySQL; na verdade, não é SQL padrão e não é suportado por outras marcas). O MySQL aceita e confia que você sabe o que está fazendo, selecionando
b
, c
e d
de forma inequívoca porque são dependências funcionais de a
. No entanto, o Microsoft SQL Server e outras marcas não permitem essa consulta, pois não podem determinar facilmente as dependências funcionais. editar: Em vez disso, o SQL padrão exige que você siga a Regra de valor único , ou seja, cada coluna na lista de seleção deve ser nomeada no
GROUP BY
cláusula ou então ser um argumento para uma função set. Considerando que
DISTINCT
sempre examina todas as colunas na lista de seleção e apenas essas colunas. É um equívoco comum que DISTINCT
permite especificar as colunas:SELECT DISTINCT(a), b, c FROM table1;
Apesar dos parênteses fazerem
DISTINCT
parece chamada de função, não é. É uma opção de consulta e um valor distinto em qualquer um dos três campos da lista de seleção levará a uma linha distinta no resultado da consulta. Uma das expressões nesta lista de seleção tem parênteses, mas isso não afetará o resultado.