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.
Assuntos:duplicadosGROUP BYHAVING