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.