Volver a la lista de artículos Artículos
Lectura de 5 minutos

Cómo encontrar valores duplicados en SQL

Los registros duplicados hacen perder tiempo, espacio y dinero. Aprenda cómo encontrar y corregir los valores duplicados con las cláusulas GROUP BY y HAVING de SQL.

Las mejores prácticas de las bases de datos suelen indicar que se tengan las restricciones únicas (como la clave principal) en una tabla, para que no se dupliquen las filas cuando se extraen y consolidan los datos. Sin embargo, es posible que, algún día, usted se encuentre trabajando en un conjunto de datos con filas duplicadas. Esto puede deberse a, por ejemplo, un error humano, a un fallo de la aplicación o a que se extrajeron y combinaron datos sin limpiar de fuentes externas.

¿Por qué hay que corregir los valores duplicados? Porque pueden afectar a los cálculos e, incluso, costar dinero a la empresa. Por ejemplo, una empresa de comercio electrónico podría procesar varias veces pedidos duplicados de clientes, lo que tendría un impacto directo en los resultados de la empresa.

En este artículo, explicaremos cómo encontrar esos duplicados en SQL mediante el uso de las cláusulas GROUP BY y HAVING .

Cómo encontrar valores duplicados en SQL

En primer lugar, hay que definir los criterios para detectar las filas duplicadas. ¿Se quiere detectar valores duplicados de una combinación de dos o más columnas o, simplemente, buscar duplicados dentro de solo una columna?

En los siguientes ejemplos, mostraremos ambos escenarios con una simple base de datos de pedidos de clientes.

El planteamiento básico, para la búsqueda de valores duplicados en SQL en cualquiera de los dos escenarios, está formado por dos pasos principales:

  1. Utilizar la cláusula GROUP BY para agrupar todas las filas en base a la(s) columna(s) de destino, es decir, la(s) columna(s) en la(s) que se desea buscar valores duplicados.
  2. Utilizar la función COUNT en la cláusula HAVING para comprobar si alguno de los grupos tiene más de una entrada; esos serían los valores duplicados.

Para repasar rápidamente la cláusula GROUP BY, eche un vistazo a nuestro video sobre GROUP BY de SQL de la serie Aprendemos SQL. Nuestro curso Ejercicios prácticos de SQL ofrece más de 80 ejercicios prácticos de SQL para practicar a fondo estos conceptos.

Valores duplicados de una columna

Aquí, demostraremos cómo se pueden encontrar valores duplicados en solo una columna. Para este ejemplo, usaremos la tabla "Orders", una versión modificada de la tabla que ya usamos en mi artículo anterior sobre el uso de GROUP BY en SQL. A continuación, hay una muestra de esa tabla:

id_del_pedidoid_del_clienteid_del_empleadofecha_del_pedidoid_del_expedidor
102489051996-07-043
102498161996-07-051
102503441996-07-082
102518431996-07-081
102518431996-07-081
102527641996-07-092
104436681997-02-121

En este ejemplo, hay algunos registros duplicados en la columna id_del_pedido. Lo ideal es que cada fila tenga un valor único para id_del_pedido, ya que a cada pedido individual se le asigna un valor propio. Por alguna razón, eso no se implementó aquí. Para encontrar los duplicados, podemos utilizar la siguiente consulta:

SELECT id_del_pedido, COUNT(id_del_pedido)
FROM Orders
GROUP BY id_del_pedido
HAVING COUNT(id_del_pedido) > 1

RESULTADO

Número de registros: 2

id_del_pedidoCOUNT(id_del_pedido)
102512
102762

Como se puede ver, el id_del_pedido 10251 (que vimos en la tabla de muestra anterior) y el id_del_pedido 10276 tienen duplicados.

Con las cláusulas GROUP BY y HAVING se pueden mostrar claramente los duplicados de los datos. Cuando se valide que las filas son iguales, se pueden eliminar los duplicados con la expresión DELETE.

Valores duplicados en varias columnas

A menudo, interesa encontrar filas en las que coincida una combinación de algunas columnas. Para este ejemplo, utilizaremos la tabla detalles_del_pedido, que muestro parcialmente a continuación:

id_de_detalle_del_pedidoid_del_pedidoid_del_productocantidad
1102481112
2102484210
310248725
410249149
510249142
6102495140
520104432812

Queremos encontrar entradas en las que las columnas id_del_pedido y id_del_producto sean idénticas. Este tipo de duplicado significa que, probablemente, haya un error en el sistema de pedidos, ya que cada pedido procesará cada uno de sus productos solo cuando estén en el carrito de la compra. Si se piden varias unidades de ese producto, solo debería aumentar el valor de cantidad, en vez de crearse otras filas (duplicadas). Si los pedidos se gestionan, empaquetan y envían automáticamente, un fallo de este tipo afectará negativamente a las operaciones de la empresa.

Para encontrar duplicados en los valores de varias columnas, se puede utilizar la siguiente consulta (es muy similar a la de solo una columna):

SELECT id_del_pedido, id_del_producto, COUNT(*)
FROM detalles_del_pedido
GROUP BY id_del_pedido, id_del_producto
HAVING COUNT(*) > 1 

RESULTADO

Número de registros: 2

De este modo, podemos confirmar que, realmente, en el sistema de pedidos hay un error. Al igual que el primer ejemplo con una sola columna, este segundo ejemplo también nos permite encontrar errores en el sistema de pedidos. En este caso, los productos se están registrando como un pedido nuevo, aunque hayan sido añadidos al mismo carrito por el mismo cliente. Ahora, usted, como propietario de la empresa, puede tomar las medidas correctivas adecuadas para rectificar este error de su sistema de gestión de pedidos.

Observe que arriba hemos utilizado COUNT(*), en vez de un contador específico de columnas como COUNT(id_del_pedido). COUNT(*) cuenta todas las filas, mientras que COUNT (Column) solo cuenta los valores no nulos de una columna especifica. Aunque, en este ejemplo no habría habido ninguna diferencia, ya que no había valores nulos en ninguna de las dos columnas agrupadas.

Dominar la gestión de valores duplicados

La búsqueda de duplicados en SQL consiste principalmente en comprobar la calidad/coherencia de los datos y en validarlos. Estas comprobaciones se suelen aplican en las operaciones cotidianas de muchas pequeñas y medianas empresas.

Además, se trata de una pregunta muy común en las entrevistas de trabajo para los puestos de ciencia de datos/analistas. Por lo tanto, es importante conocer los aspectos básicos de cómo abordar esta pregunta. Aun así, es obvio que, realmente, es necesario tener más práctica para conocer claramente los matices que aporta la singularidad de cada conjunto de datos y los criterios que se deben aplicar para esas comprobaciones de homogeneidad y calidad.

Para entender mejor cómo gestionar los registros duplicados, recomiendo el curso de LearnSQL SQL para principiantes que cubre completamente estos conceptos, con un conjunto completo de ejercicios prácticos.