viernes, 26 de octubre de 2018

Eliminar filas repetidas de una tabla Sql Server

En muchas ocaciones tenemos datos repetidos en nuestra tabla y es necesario eliminarlos. En este post vamos explicar cómo hacerlo, para esto tendremos la siguiente tabla a la que llamaremos Usuario.


Para nuestro ejemplo debemos tener estos registros, nótese que la columna Dni está remarcado con color rojo lo que indica que son los registros repetidos.



Como solo tenemos 13 registros pues nos resulta fácil determinar cuales son los repetidos, el problema es cuando tenemos muchos registros, entonces lo que tenemos que hacer es una query que nos muestre cuáles son los que se están repitiendo.

Algo rápido que podemos hacer es escribir una query que nos dé como resultado la cantidad de veces que están repetidos.



Como estamos haciendo uso de una función de agregado (COUNT) necesitamos agrupar por las columnas a mostrar, en este caso agrupamos por Nombre y Dni. Ahora ya sabemos la cantidad de veces que se repite un registro.

Necesitamos determinar cuáles son los registros que se repiten, para esto debemos hacer un Inner Join entre la misma tabla y devolver aquellos Id que están en ambas con la condición que el Id de la tabla Usuario A sea mayor al de la B.

SELECT A.Id
FROM Usuario A INNER JOIN Usuario B ON A.Nombre = B.Nombre
                                   AND A.Dni = B.Dni
                                   AND A.Id > B.Id


Ahora recién procedemos a eliminar los registros repetidos, ejecutamos esta query y verificamos los resultados.

DELETE Usuario 
WHERE Id IN (SELECT A.Id
      FROM Usuario A INNER JOIN Usuario B ON A.Nombre = B.Nombre
                                         AND A.Dni = B.Dni
                                         AND A.Id > B.Id)

Select *
FROM Usuario

Bueno y con esto terminamos.

Aquí dejo el enlace del video.