Técnicas sql para trabajar con duplicidades
Los datos duplicados son un problema muy común en bases de datos. Saber cómo detectarlos, validarlos y eliminarlos de forma eficiente es una habilidad esencial para cualquier desarrollador o DBA.- Usando HAVING: La forma más sencilla y rápida de identificar qué registros están duplicados.
Ideal para auditorías rápidas y para saber cuántos duplicados existen por grupo.SELECT nome, cpf, COUNT(*) AS qtde FROM cliente GROUP BY nome, cpf HAVING COUNT(*) > 1; - Usando Funciones de Ranking (ROW_NUMBER()): Esta es una de las técnicas más elegantes y potentes. Permite identificar las filas duplicadas manteniendo solo la primera ocurrencia.
Perfecta cuando quieres visualizar o trabajar solo con las filas duplicadas, conservando la primera ocurrencia.WITH ranked AS ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY nome, cpf ORDER BY cliente_id ) AS rn FROM cliente ) SELECT * FROM ranked WHERE rn > 1; - Usando SELF JOINCompara la tabla consigo misma para encontrar duplicados.
Muy útil para validaciones cruzadas y cuando necesitas reglas de negocio más específicas.SELECT e1.* FROM cliente e1 INNER JOIN cliente e2 ON e1.nome = e2.nome AND e1.cpf = e2.cpf AND e1.cliente_id <> e2.cliente_id; -
Usando DELETE con CTE (Eliminar duplicados): La forma más limpia y segura de eliminar duplicados manteniendo solo una fila.
Siempre hacer un SELECT primero para verificar qué se va a eliminar antes de ejecutar el DELETE.WITH ranked AS ( SELECT cliente_id, ROW_NUMBER() OVER ( PARTITION BY nome, cpf ORDER BY cliente_id ) AS rn FROM cliente ) DELETE FROM cliente c WHERE c.cliente_id IN ( SELECT cliente_id FROM ranked WHERE rn > 1 );