Detectar registros duplicados por una clave de negocio

Señal o problema observado

Una carga contiene clientes con correos repetidos, o una tabla permite guardar varias filas que representan el mismo dato funcional. La llave primaria distingue cada registro, pero no responde si el negocio los considera equivalentes.

Qué necesitamos distinguir

Primero definiremos la clave de negocio. En este ejemplo dos filas son candidatas a duplicado cuando su correo coincide después de retirar espacios laterales y normalizar mayúsculas. Los correos nulos o vacíos se excluyen: compartir la ausencia de un dato no demuestra que dos clientes sean la misma persona.

Consulta

WITH ClientesNormalizados AS
(
    SELECT
        ci.IdClienteImportado,
        ci.Nombre,
        ci.Correo,
        LOWER(NULLIF(TRIM(ci.Correo), N'')) AS CorreoNormalizado
    FROM dbo.ClienteImportado AS ci
),
ClavesDuplicadas AS
(
    SELECT
        cn.CorreoNormalizado,
        COUNT_BIG(*) AS Cantidad
    FROM ClientesNormalizados AS cn
    WHERE cn.CorreoNormalizado IS NOT NULL
    GROUP BY cn.CorreoNormalizado
    HAVING COUNT_BIG(*) > 1
)
SELECT
    cn.IdClienteImportado,
    cn.Nombre,
    cn.Correo,
    cn.CorreoNormalizado,
    cd.Cantidad AS FilasConLaMismaClave
FROM ClientesNormalizados AS cn
INNER JOIN ClavesDuplicadas AS cd
    ON cd.CorreoNormalizado = cn.CorreoNormalizado
ORDER BY
    cn.CorreoNormalizado,
    cn.IdClienteImportado;

Parámetros o permisos

Sustituye Correo por la columna o combinación que realmente identifica una entidad en tu sistema. Una clave de negocio podría ser un número de cliente, una referencia externa o varias columnas, no necesariamente un correo.

La normalización también forma parte de la regla. TRIM ignora espacios laterales y LOWER hace visible la intención de comparar sin diferencias de mayúsculas; la intercalación de la columna puede hacer que esta última transformación sea redundante. No retires acentos, signos o caracteres sin confirmar que el negocio los considera equivalentes.

La consulta solo requiere permiso de lectura sobre la tabla.

Cómo leer el resultado

Cada fila conserva su identificador original y muestra la clave utilizada para agruparla. FilasConLaMismaClave indica el tamaño del grupo repetido. Si un correo aparece tres veces, veremos las tres filas con el valor 3.

La primera CTE prepara los datos; la segunda conserva únicamente las claves con más de una aparición. La consulta final vuelve al detalle para que podamos comparar nombres, fechas u otras columnas antes de decidir qué ocurrió.

Si solo necesitas una lista resumida, ejecuta la segunda CTE como consulta final y selecciona CorreoNormalizado y Cantidad.

Qué conclusión sí permite obtener

Permite localizar grupos repetidos bajo una definición explícita y medir cuántas filas participan en cada uno.

Qué conclusión todavía no permite obtener

No demuestra que dos filas representen a la misma persona ni decide cuál debe conservarse. Un correo compartido puede ser válido; dos correos diferentes también podrían pertenecer a un mismo cliente.

Tampoco descubre duplicados aproximados por errores ortográficos. Ese problema necesita reglas de calidad o comparación difusa adicionales.

Siguiente comprobación razonable

Revisa las columnas que describen origen, fecha y actividad de cada fila. Después confirma la regla con quien conoce el dato y comprueba qué tablas referencian los identificadores antes de fusionar o eliminar registros.