SQL: excluindo registros duplicados em uma tabela

Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

SQL: Excluindo registros duplicados em uma tabela

Quando você tem uma tabela contendo vários registros com campos de mesmo valor que você gostaria de reduzir a apenas um registro, você pode fazer esta redução usando um  único comando DELETE do SQL. Para tanto é necessário que a tabela contenha um campo que sirva para identificar de modo único cada registro. Se a tabela não tiver um campo assim, adicione um campo de auto-numeração provisoriamente. Feito isto, você irá agrupar os registros que pretende reduzir a um único registro pelos campos de valores duplicados.

Supondo que temos a tabela "Pessoas" com quatro campos: Id (identificador único) , Nome , Endereço e Telefone. Nesta tabela você tem os campos Nome e Endereço duplicados formando grupos de duplicações. Você deseja reduzir cada grupo de registros duplicados a um único registro. Para tanto é preciso obter por algum critério apenas um  registro de cada grupo de duplicados. Como cada um deles tem o campo Id como identificador único, você pode obter o identificador de apenas um de cada grupo de duplicados com a seguinte consulta:

SELECT MAX(Id) As IdMaximo FROM Pessoas GROUP BY Nome, Endereço

Esta consulta retorna apenas o maior Id de cada grupo de registros onde Nome e Endereço sejam iguais. Quando não houver duplicação para um par de valores de Nome e Endereço, o Id retornado como IdMaximo é o do registro único mesmo. Esta consulta nos retorna então o Id de todos os registros que podemos manter na tabela sem duplicações de Nome e Endereço. O passo seguinte é excluir todos os registros que não têm o seu Id dentro deste conjunto. Assim:

DELETE * FROM Pessoas WHERE Id NOT IN (SELECT MAX(Id) As IdMaximo FROM Pessoas GROUP BY Nome, Endereço)