¿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

Share This