
¿Cuántas veces hemos tenido la necesidad de eliminar registros duplicados de alguna tabla en SQL Server?
En este post y video te voy a mostrar como podes hacer esta tarea.
Crear tabla de datos
Mi primer paso será crear una tabla con datos duplicados para luego poderlos eliminar
USE TEMPDB
DROP TABLE IF EXISTS DBO.EMPLEADOS
CREATE TABLE DBO.EMPLEADOS
(ID INT IDENTITY PRIMARY KEY,
NOMBRE VARCHAR(255),
APELLIDO VARCHAR(255)
)
INSERT INTO DBO.EMPLEADOS (NOMBRE,APELLIDO)
VALUES ('MAXI','ACCOTTO')
GO 4
INSERT INTO DBO.EMPLEADOS (NOMBRE,APELLIDO)
VALUES ('GASTON','LOPEZ')
GO 2
INSERT INTO DBO.EMPLEADOS (NOMBRE,APELLIDO)
VALUES ('LEONARDO','ACCOTTO')
Buscar duplicados
Para buscar los registros duplicados usaremos una CTE con la función ROW_NUMBER()
-- BUSCAMOS DUPLICADOS
WITH C AS
(
SELECT ID,NOMBRE,APELLIDO,
ROW_NUMBER() OVER (PARTITION BY
NOMBRE,APELLIDO
ORDER BY ID) AS DUPLICADO
FROM DBO.EMPLEADOS
)
SELECT * FROM C
WHERE DUPLICADO > 1
Eliminando registros duplicados
Para eliminar los registros duplicados usaremos la misma CTE con la instrucción DELETE en lugar de SELECT
-- BORRAMOS REGISTROS DUPLICADOS
WITH C AS
(
SELECT ID,NOMBRE,APELLIDO,
ROW_NUMBER() OVER (PARTITION BY
NOMBRE,APELLIDO
ORDER BY ID) AS DUPLICADO
FROM DBO.EMPLEADOS
)
DELETE FROM C
WHERE DUPLICADO > 1