Cómo eliminar registros duplicados

by | Jun 10, 2021 | SQL Server, TSQL | 0 comments

¿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

Acerca del autor

Maximiliano Accotto

Experto en SQL Server y BI

Con mas de 20 años de experiencia y trayectoria trabajando con bases de datos SQL Server y BI.

Fui Microsoft MVP desde el 2005 al 2019 y soy orador frecuente para distintos eventos de Microsoft y comunidades técnicas.

Me especializado en temas de tuning, administracion, performance, diseño y BI en el mundo Microsoft ya sea para ambientes locales como nube.