CodePráticov3.9.0
SQL

Como encontrar registros duplicados em SQL

Use GROUP BY e HAVING para localizar valores duplicados e recuperar os registros completos com segurança.

Consulta básica

Quando você precisa descobrir quais valores aparecem mais de uma vez, agrupe pela coluna que deveria ser única e filtre os grupos cuja contagem seja maior que 1.

SELECT
    cpf,
    COUNT(*) AS quantidade
FROM alunos
WHERE cpf IS NOT NULL
GROUP BY cpf
HAVING COUNT(*) > 1;

O WHERE remove valores nulos antes do agrupamento. O HAVING filtra o resultado depois do GROUP BY.

Trazer os registros completos

Depois de identificar as chaves duplicadas, faça um JOIN com a tabela original para enxergar todas as linhas envolvidas.

SELECT a.*
FROM alunos a
INNER JOIN (
    SELECT cpf
    FROM alunos
    WHERE cpf IS NOT NULL
    GROUP BY cpf
    HAVING COUNT(*) > 1
) d ON d.cpf = a.cpf
ORDER BY a.cpf, a.id;

Duplicidade por mais de uma coluna

Se a regra de unicidade envolver mais de um campo, agrupe por todos eles.

SELECT
    escola_id,
    matricula,
    COUNT(*) AS quantidade
FROM alunos
GROUP BY escola_id, matricula
HAVING COUNT(*) > 1;

Antes de excluir duplicados

Atenção: localizar duplicados é diferente de decidir qual registro excluir. Antes de remover linhas, verifique chaves estrangeiras, histórico e qual registro deve ser preservado.