Como localizar e excluir duplicatas no SQL

Como localizar e excluir duplicatas no SQL

As melhores práticas de design de banco de dados recomendam usar a restrição UNIQUE para evitar duplicatas em um banco de dados. No entanto, ao trabalhar com um banco de dados mal projetado ou dados impuros, pode ser necessário encontrar duplicatas e excluí-las manualmente.

Continue lendo para saber como encontrar duplicatas em um banco de dados SQL e como excluí-las.

Criar um banco de dados de amostra

Para fins de demonstração, crie uma tabela chamada Users com uma coluna de nome e pontuação executando esta consulta SQL.

DROP TABLE IF EXISTS Users;

CREATE TABLE Users (
    pk_id int PRIMARY KEY,
    name VARCHAR (16),
    score INT,
);

Insira alguns valores de amostra executando esta consulta:

INSERT INTO
    Users(pk_id, name, score)
VALUES
    (1, 'Jane', 20),
    (2, 'John', 13),
    (3, 'Alex', 32),
    (4, 'John', 46),
    (5, 'Jane', 20),
    (6, 'Mary', 34),
    (7, 'Jane', 20),
    (8, 'John', 13)

Observe que algumas dessas linhas contêm valores duplicados para a coluna de nome.

Sinta-se à vontade para verificar esses comandos e consultas SQL se precisar de uma explicação mais detalhada sobre como manipular bancos de dados usando SQL.

Usando GROUP BY para encontrar valores duplicados

Você pode usar a instrução GROUP BY para organizar os valores que atendem a determinadas condições no mesmo grupo.

Digamos que os nomes na tabela de amostra tenham que ser únicos. Você pode usar GROUP BY para agrupar as linhas que compartilham o mesmo nome.

SELECT name, COUNT(name)
FROM Users
GROUP BY name
HAVING COUNT(name) > 1

COUNT permite selecionar as linhas que possuem mais de um usuário com o mesmo nome.

Quando você executar esta consulta, o banco de dados retornará linhas contendo John e Jane como duplicatas.

Excluindo duplicatas de um banco de dados

Depois de localizar as duplicatas, você pode querer excluí-las usando a instrução DELETE.

Para este exemplo, execute a seguinte consulta:

WITH cte AS (
    SELECT *
        ROW_NUMBER() OVER (
            PARTITION BY
                name, score
            ORDER BY
                name, score
        ) R
     FROM
        Users
)

DELETE FROM cte
WHERE R > 1;

Essa consulta usa uma expressão CTE para localizar as duplicatas e, em seguida, exclui todas elas, exceto uma.

Por que você deve excluir dados duplicados

Excluir dados duplicados não é obrigatório. No entanto, permite liberar o espaço usado pelas linhas duplicadas.

Menos linhas também significam que as consultas podem ser executadas muito mais rapidamente, levando a um desempenho mais alto. Use as consultas neste tutorial para ajudá-lo a localizar e remover duplicatas de um banco de dados SQL.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *