Buscar Registros Repetidos en SQL: Cómo Identificar y Gestionar Duplicados

  Consideraciones Importantes

La identificación y eliminación de registros duplicados en bases de datos es crucial para mantener la integridad de los datos. Los duplicados pueden surgir por varias razones, como errores de entrada de datos, problemas de importación y más. Este README proporciona ejemplos de cómo buscar registros duplicados en SQL, ayudando a limpiar y optimizar tus bases de datos.

Tabla de Ejemplo

A continuación se define una tabla llamada clientes que contiene registros repetidos:

bash
| id  | nombre          | email               |
|-----|-----------------|---------------------|
| 1   | Juan Pérez      | juan@example.com    |
| 2   | María González  | maria@example.com   |
| 3   | Juan Pérez      | juan@example.com    |
| 4   | Pedro Rodríguez | pedro@example.com   |
| 5   | Ana Martínez    | ana@example.com     |
| 6   | Juan Pérez      | juan@example.com    |
| 7   | Luis Fernández  | luis@example.com    |

Casos de Uso

1. Buscar Registros Duplicados

Para buscar registros duplicados en la tabla clientes, puedes utilizar la siguiente consulta SQL:

sql
SELECT nombre, email, COUNT(*) AS cantidad
FROM clientes
GROUP BY nombre, email
HAVING COUNT(*) > 1;

Resultado

Esta consulta devolverá los registros duplicados junto con el conteo de cuántas veces aparecen:

bash
| nombre         | email                | cantidad |
|----------------|----------------------|----------|
| Juan Pérez     | juan@example.com     | 3        |

2. Eliminar Registros Duplicados

Si deseas eliminar los registros duplicados, manteniendo solo uno de ellos, puedes utilizar una consulta como la siguiente:

sql
DELETE FROM clientes
WHERE id NOT IN (
  SELECT MIN(id)
  FROM clientes
  GROUP BY nombre, email
);

Resultado

bash
| nombre         | email                | cantidad |
|----------------|----------------------|----------|
| Juan Pérez     | juan@example.com     | 3        |
| María López    | maria@example.com    | 1        |
| Ana Martínez   | ana@example.com      | 2        |

Esta consulta eliminará los duplicados, dejando solo el registro con el id más bajo.

3. Crear una Nueva Tabla Sin Duplicados

Si prefieres crear una nueva tabla que contenga solo los registros únicos, puedes utilizar:

sql
CREATE TABLE clientes_unicos AS
SELECT DISTINCT * FROM clientes;

Esto creará una nueva tabla llamada clientes_unicos que solo contendrá registros únicos.

bash
| id | nombre          | email               |
|----|-----------------|---------------------|
| 1  | Juan Pérez      | juan@example.com    |
| 2  | María González   | maria@example.com  |
| 4  | Pedro Rodríguez  | pedro@example.com  |
| 5  | Ana Martínez     | ana@example.com    |
| 7  | Luis Fernández   | luis@example.com   |

4. Consultar Registros Únicos

Para simplemente consultar los registros únicos de la tabla clientes, utiliza la siguiente consulta:

bash
SELECT DISTINCT nombre, email FROM clientes;

Resultado

bash
| nombre          | email              |
|-----------------|--------------------|
| Juan Pérez      | juan@example.com   |
| María González  | maria@example.com  |
| Pedro Rodríguez | pedro@example.com  |
| Ana Martínez    | ana@example.com    |
| Luis Fernández  | luis@example.com   |
  Notas

  • La consulta DISTINCT asegura que cada combinación de nombre y email solo aparezca una vez en el resultado.
  • Los registros duplicados de Juan Pérez han sido eliminados, lo que permite obtener una lista más limpia.