Cómo eliminar valores duplicados de una tabla en SQL Server

Resumen: en este tutorial, aprenderás cómo eliminar filas duplicadas de una tabla en SQL Server.
Introducción eliminar filas duplicadas
Para eliminar las filas duplicadas en una tabla en SQL Server, sigue estos pasos:
- Encuentra filas duplicadas usando la cláusula GROUP BY o la función ROW_NUMBER().
- Use la declaración DELETE para eliminar las filas duplicadas.
Configuración de una tabla de ejemplo
Primero, crea una nueva tabla llamada sales.contacts
de la siguiente manera:
DROP TABLE IF EXISTS sales.contacts;
CREATE TABLE sales.contacts(
contact_id INT IDENTITY(1,1) PRIMARY KEY,
first_name NVARCHAR(100) NOT NULL,
last_name NVARCHAR(100) NOT NULL,
email NVARCHAR(255) NOT NULL,
);
En segundo lugar, insertar algunas filas en la tabla sales.contacts:
INSERT INTO sales.contacts
(first_name,last_name,email)
VALUES
('Syed','Abbas','syed.abbas@estradawebgroup.com'),
('Catherine','Abel','catherine.abel@estradawebgroup.com'),
('Kim','Abercrombie','kim.abercrombie@estradawebgroup.com'),
('Kim','Abercrombie','kim.abercrombie@estradawebgroup.com'),
('Kim','Abercrombie','kim.abercrombie@estradawebgroup.com'),
('Hazem','Abolrous','hazem.abolrous@estradawebgroup.com'),
('Hazem','Abolrous','hazem.abolrous@estradawebgroup.com'),
('Humberto','Acevedo','humberto.acevedo@estradawebgroup.com'),
('Humberto','Acevedo','humberto.acevedo@estradawebgroup.com'),
('Pilar','Ackerman','pilar.ackerman@estradawebgroup.com');
Tercero, consultar los datos de la tabla sales.contacts
:
SELECT
contact_id,
first_name,
last_name,
email
FROM
sales.contacts;
Resultado:
contact_id | first_name | last_name | |
---|---|---|---|
1 | Syed | Abbas | syed.abbas@estradawebgroup.com |
2 | Catherine | Abel | catherine.abel@estradawebgroup.com |
3 | Kim | Abercrombie | kim.abercrombie@estradawebgroup.com |
4 | Kim | Abercrombie | kim.abercrombie@estradawebgroup.com |
5 | Kim | Abercrombie | kim.abercrombie@estradawebgroup.com |
6 | Hazem | Abolrous | hazem.abolrous@estradawebgroup.com |
7 | Hazem | Abolrous | hazem.abolrous@estradawebgroup.com |
8 | Humberto | Acevedo | humberto.acevedo@estradawebgroup.com |
9 | Humberto | Acevedo | humberto.acevedo@estradawebgroup.com |
10 | Pilar | Ackerman | pilar.ackerman@estradawebgroup.com |
Hay muchas filas duplicadas (3,4,5
), (6,7
) y (8,9
) para los contactos que tienen el mismo nombre, apellido y correo electrónico.
Eliminar filas duplicadas en la tabla de ejemplo
La siguiente instrucción utiliza una expresión de tabla común (CTE
) para eliminar filas duplicadas:
WITH cte AS (
SELECT
contact_id,
first_name,
last_name,
email,
ROW_NUMBER() OVER (
PARTITION BY
first_name,
last_name,
email
ORDER BY
first_name,
last_name,
email
) row_num
FROM
sales.contacts
)
DELETE FROM cte
WHERE row_num > 1;
Resultado
(4 rows affected)
En esta declaración:
- Primero, el
CTE
usa la función ROW_NUMBER() para encontrar las filas duplicadas especificadas por valores en las columnasfirst_name
,last_name
yemail
. - Luego, la declaración DELETE elimina todas las filas duplicadas, pero mantiene solo una aparición de cada grupo duplicado.
Si vuelves a consultar los datos de la tabla sales.contacts, verá que se eliminan todas las filas duplicadas.
SELECT contact_id,
first_name,
last_name,
email
FROM sales.contacts
ORDER BY first_name,
last_name,
email;
Resultado:
contact_id | first_name | last_name | |
---|---|---|---|
1 | Syed | Abbas | syed.abbas@estradawebgroup.com |
2 | Catherine | Abel | catherine.abel@estradawebgroup.com |
3 | Kim | Abercrombie | kim.abercrombie@estradawebgroup.com |
6 | Hazem | Abolrous | hazem.abolrous@estradawebgroup.com |
8 | Humberto | Acevedo | humberto.acevedo@estradawebgroup.com |
10 | Pilar | Ackerman | pilar.ackerman@estradawebgroup.com |
En este tutorial, has aprendido a eliminar filas duplicadas de una tabla en SQL Server.