Uso de SQL GROUP BY y HAVING para Detectar Valores Duplicados

5 min de lectura
Uso de SQL GROUP BY y HAVING para Detectar Valores Duplicados Los registros duplicados son uno de los problemas más comunes en bases de datos del mundo real. Ya sea que trabajes en finanzas, salud, logística, educación, análisis de datos o plataformas SaaS, las empresas esperan que los desarrolladores junior e intermedios sepan identificar, investigar y limpiar datos duplicados de forma eficiente. Esto no es solo una habilidad de “sintaxis SQL”. Es una competencia de negocio práctica directamente relacionada con la precisión de reportes, la prevención de fraudes, la confiabilidad operativa y la garantía de calidad de datos. Los reclutadores y entrevistadores técnicos evalúan frecuentemente a los candidatos con problemas como: - Detección de facturas duplicadas - Registros de usuarios repetidos - Múltiples transacciones con la misma marca de tiempo - Inconsistencias en migraciones de datos - Anomalías en registros de eventos - Importaciones duplicadas desde sistemas externos Comprender correctamente el uso de GROUP BY y HAVING te permite resolver estos problemas de forma eficiente y demostrar competencia real en ingeniería backend. ## Por qué las empresas valoran la detección de duplicados Muchos desarrolladores junior se enfocan únicamente en crear funcionalidades. Los ingenieros backend sólidos entienden la integridad de los datos. Las empresas pierden dinero cuando los duplicados generan: - Paneles de analítica incorrectos - Pagos duplicados - Correos o notificaciones repetidas - Conteos de inventario incorrectos - Reportes de auditoría engañosos - Sincronización defectuosa entre sistemas En entrevistas, los candidatos que saben explicar cómo identificar y aislar duplicados destacan inmediatamente porque demuestran pensamiento operativo y no solo conocimiento superficial de tutoriales. ## Conceptos fundamentales de SQL para detectar duplicados ### 1. GROUP BY La cláusula GROUP BY agrupa filas que comparten los mismos valores. Ejemplo: SELECT email FROM users GROUP BY email; Esta consulta agrupa todos los correos electrónicos iguales. ### 2. COUNT() La función COUNT() calcula cuántas filas existen dentro de cada grupo. SELECT email, COUNT() FROM users GROUP BY email; Esto muestra cuántas veces aparece cada correo. ### 3. HAVING La cláusula HAVING filtra resultados después de la agregación. SELECT email, COUNT() FROM users GROUP BY email HAVING COUNT() > 1; Esto devuelve únicamente los correos duplicados. ## Patrón fundamental de detección de duplicados La mayoría de los casos de detección de duplicados siguen esta estructura: SELECT column_name, COUNT() FROM table_name GROUP BY column_name HAVING COUNT() > 1; Este patrón es extremadamente importante porque aparece en: - Entrevistas técnicas - Tareas de limpieza de bases de datos - Scripts de validación de migraciones - Flujos de depuración en producción - Auditoría de analítica ## Detección de duplicados en múltiples columnas Los sistemas empresariales reales rara vez dependen de una sola columna. La detección de duplicados suele requerir combinaciones de valores. Ejemplo: SELECT nombre, apellido, fecha_nacimiento, COUNT() FROM clientes GROUP BY nombre, apellido, fecha_nacimiento HAVING COUNT() > 1; Esta consulta detecta clientes con la misma combinación de identidad completa. Los empleadores valoran a los desarrolladores que entienden reglas de duplicación compuestas, ya que los sistemas empresariales dependen del negocio y no solo de identificadores simples. ## Trabajo con duplicados basados en timestamps Los timestamps introducen un desafío más avanzado. Imagina un sistema que almacena: - Registros de actividad de usuarios - Eventos de procesamiento de pagos - Lecturas de sensores - Entradas de auditoría de seguridad - Eventos de mensajería del sistema Dos timestamps pueden diferir en milisegundos y aun así representar el mismo evento lógico. Aquí es donde la normalización de timestamps se vuelve esencial. ## Detectar duplicados en el mismo segundo Un requisito común es: “Encontrar registros que ocurren en el mismo segundo”. En lugar de comparar el timestamp completo, se normaliza la precisión. ### Ejemplo MySQL SELECT user_id, DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') AS segundo, COUNT() FROM logs GROUP BY user_id, segundo HAVING COUNT() > 1; ### Ejemplo PostgreSQL SELECT user_id, DATE_TRUNC('second', created_at) AS segundo, COUNT() FROM logs GROUP BY user_id, segundo HAVING COUNT() > 1; Esto demuestra una habilidad profesional importante: - Traducir reglas de negocio a lógica de datos - Normalizar valores antes de comparar - Reducir ruido de precisión en timestamps ## Detección de eventos repetidos en diferentes días Algunos sistemas requieren detectar acciones repetidas a la misma hora en días distintos. Ejemplo: “Mostrar registros donde el mismo usuario realiza acciones exactamente en el mismo segundo en varios días”. En este caso se ignora la fecha. Ejemplo de consulta: SELECT user_id, TIME(created_at) AS hora_repetida, COUNT() FROM activity_logs GROUP BY user_id, hora_repetida HAVING COUNT() > 1; Esto es útil en: - Detección de fraude - Análisis de bots - Auditoría de procesos automáticos - Verificación de sistemas programados ## Patrones avanzados de lógica de negocio ### 1. Transacciones duplicadas SELECT customer_id, amount, transaction_date, COUNT() FROM payments GROUP BY customer_id, amount, transaction_date HAVING COUNT() > 1; Útil en auditoría financiera. ### 2. Subidas de archivos duplicadas SELECT file_hash, COUNT() FROM uploads GROUP BY file_hash HAVING COUNT() > 1; Común en optimización de almacenamiento. ### 3. Registros de eventos duplicados SELECT event_type, TIME(created_at), COUNT() FROM system_logs GROUP BY event_type, TIME(created_at) HAVING COUNT() > 1; ## Recuperar filas completas duplicadas Uno de los errores más comunes es devolver solo datos agrupados sin las filas completas. La forma correcta: SELECT t. FROM users t JOIN ( SELECT email FROM users GROUP BY email HAVING COUNT() > 1 ) duplicados ON t.email = duplicados.email; Este enfoque combina: - Agregación - Subconsultas - JOIN - Investigación de datos ## Preguntas comunes de entrevista ### Pregunta 1 “¿Cómo encontrarías usuarios duplicados en una base de datos?” Respuesta fuerte: - Usar GROUP BY en los campos identificadores - Aplicar COUNT() - Filtrar con HAVING COUNT() > 1 - Hacer JOIN para obtener registros completos ### Pregunta 2 “¿Cómo detectar eventos duplicados en el mismo segundo?” Respuesta fuerte: - Normalizar timestamps - Truncar precisión a segundos - Agrupar por valor normalizado ## Ideas de proyectos
Consulta gratuita — respuesta en 24 h

Construyamos
algo extraordinario

500+ proyectos entregados. 8+ años de experiencia. Sistemas empresariales, IA y aplicaciones de alto rendimiento.