07-06-2026

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.

    SELECT 
    nome,
    cpf,
    COUNT(*) AS qtde
    FROM cliente
    GROUP BY nome, cpf
    HAVING COUNT(*) > 1;
    
    Ideal para auditorías rápidas y para saber cuántos duplicados existen por grupo.
  • 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.

    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;
    
    Perfecta cuando quieres visualizar o trabajar solo con las filas duplicadas, conservando la primera ocurrencia.
  • Usando SELF JOINCompara la tabla consigo misma para encontrar duplicados.

    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;
    
    Muy útil para validaciones cruzadas y cuando necesitas reglas de negocio más específicas.
  • Usando DELETE con CTE (Eliminar duplicados): La forma más limpia y segura de eliminar duplicados manteniendo solo una fila.

    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
    );
    
    Siempre hacer un SELECT primero para verificar qué se va a eliminar antes de ejecutar el DELETE.

Resumen de las técnicas

Técnica Propósito Mejor Uso
HAVING Detectar Auditoría rápida
ROW_NUMBER() Identificar y filtrar Análisis y limpieza
SELF JOIN Comparación cruzada Validaciones complejas
DELETE + CTE Eliminar duplicados Limpieza definitiva