Como se livrar de linhas duplicadas em uma tabela Oracle SQL

Se você está usando um banco de dados Oracle, um problema comum são as linhas duplicadas em tabelas. Geralmente isso acontece quando condicionalismos únicos são removidos durante o carregamento. Qualquer que seja o motivo, você pode remover registros duplicados. Registros duplicados têm valores idênticos para todas as colunas (ou colunas que fazem parte da chave única).

Há mais do que uma maneira de se apagar registros duplicados. Vamos supor que a Tabela_A tem os seguintes dados:

Col1 Col2

------ -------

101 201

102 202

103 203

102 202

104 204

101 201

Veja o primeiro método.

  • Faça um backup de sua tabela original. Este é o passo mais importante!
  • Verifique se  seu backup é bom e você conseguirá restaurar tabela original, se necessário.
  • Aqui está o código para se apagar registros duplicados:

DELETE FROM Table_A a

WHERE ROWID != ( SELECT MAX(ROWID)

FROM Table_A b

WHERE b.col1 = a.col1

AND b.col2 = a.col2 );

O Oracle tem uma pseudo coluna chamada "ROWID", que é única para cada linha em uma tabela. Então podemos usar isso para apagar os registros duplicados. O código acima irá encontrar apenas um ROWID para registros não-duplicados. Para os registros duplicados, isso vai eliminar um registro com um ROWID menor. Se existirem mais de duas colunas que componham uma única chave por registro, então você deve incluir todas as colunas na condição WHERE. Há dois registros duplicados no exemplo, não importa qual registro que eliminamos, já que todas as colunas têm os mesmos valores.

  • Verifique seus resultados e observe seu trabalho.

Agora vamos ver um segundo método.

  • Faça um backup de sua tabela original. Esse ainda é o passo mais importante!
  • Verifique se seu backup é bom e que você pode restaurar tabela original, se necessário.
  • Crie uma tabela temporária com os registros exclusivos utilizando cláusula DISTINCT.
  • Exclua todos os registros de tabela original.
  • Coloque todos os registros da tabela temporária na tabela original.
  • Verifique os resultados e observe seu trabalho.


Dependendo da sua situação, você pode escolher um dos dois métodos para obter resultados mais rápidos. Registros duplicados podem ser prevenidos através dos Unique Indexes. Os Unique Indexes garantem que as colunas dentro do índice não tenham valores duplicados.