Voltar para a lista de artigos Artigos
5 minutos de leitura

Como Encontrar Valores Duplicados em SQL

Registros duplicados nos fazem perder tempo, espaço e dinheiro. Aprenda como encontrar e corrigir valores duplicados usando as cláusulas GROUP BY e HAVING do SQL.

Guias de boas práticas em banco de dados recomendam ter restrições únicas (como uma chave primária) em uma tabela para evitar a duplicação de linhas durante a extração e consolidação de dados. Mesmo assim, você pode acabar tendo que trabalhar com um conjunto de dados com linhas duplicadas. Isto pode acontecer devido a erro humano, um bug na aplicação ou dados não limpos que foram extraídos e fundidos a partir de fontes externas, entre outras coisas.

Por que corrigir valores duplicados? Porque eles podem atrapalhar cálculos e até mesmo custar dinheiro a uma empresa. Por exemplo, uma loja on-line pode processar várias vezes pedidos duplicados de clientes, impactando diretamente no resultado final do negócio.

Neste artigo, mostraremos como encontrar essas duplicatas usando as cláusulas GROUP BY e HAVING no SQL.

Como Encontrar Valores Duplicados em SQL

Primeiro, você precisa definir os critérios para detectar linhas duplicadas. Existem duas ou mais colunas onde você deseja detectar valores duplicados ou você deseja procurar por duplicatas dentro de uma única coluna?

Nos exemplos abaixo, exploraremos estes dois cenários utilizando um banco de dados simples de pedidos de clientes.

Em termos da abordagem geral para qualquer um dos cenários, encontrar valores duplicados em SQL compreende duas etapas principais:

  1. Usar a cláusula GROUP BY para agrupar todas as linhas pela(s) coluna(s) de destino - ou seja, a(s) coluna(s) em que se deseja verificar a existência de valores duplicados.
  2. Usar a função COUNT na cláusula HAVING para verificar se algum dos grupos tem mais de 1 entrada; esses seriam os valores duplicados.

Para uma rápida atualização visual sobre GROUP BY, confira nosso vídeo da série "We Learn SQL", SQL GROUP BY. Nosso Curso de Práticas em SQL oferece mais de 80 exercícios práticos em SQL para praticar estes conceitos de forma mais aprofundada.

Valores duplicados em uma coluna

Aqui, demonstraremos como encontrar valores duplicados em uma única coluna. Para este exemplo, usaremos a tabela de Pedidos, uma versão modificada da tabela que usamos em meu artigo anterior sobre o uso de GROUP BY em SQL. Uma amostra da tabela é exibida abaixo.

id_do_pedidoid_do_clienteid_do_funcionariodata_do_pedidoid_da_transportadora
102489051996-07-043
102498161996-07-051
102503441996-07-082
102518431996-07-081
102518431996-07-081
102527641996-07-092
104436681997-02-121

Neste exemplo, há algumas duplicatas na coluna id_do_pedido. Idealmente, cada linha deve ter um valor único para id_do_pedido, já que cada pedido individual recebe um valor único. Por alguma razão, isso não foi feito aqui. Para encontrar as duplicatas, podemos usar a seguinte consulta:

SELECT id_do_pedido, COUNT(id_do_pedido)
FROM Pedidos
GROUP BY id_do_pedido
HAVING COUNT(id_do_pedido) > 1

RESULTADO

Número de Registros: 2

id_do_pedidoCOUNT(id_do_pedido)
102512
102762

Como podemos ver, os registros com id_do_pedido 10251 (que vimos na amostra da tabela acima) e id_do_pedido 10276 têm duplicatas.

Usando as cláusulas GROUP BY e HAVING, é possível identificar claramente as duplicatas em seus dados. Uma vez confirmado que as linhas são as mesmas, você pode remover a(s) duplicata(s) usando a função DELETE.

Valores duplicados em várias colunas

Muitas vezes, precisamos encontrar linhas com correspondências entre diferentes colunas. Para este exemplo, usaremos a tabela informacoes_do_pedido, exibida abaixo.

id_informacoes_do_pedidoid_do_pedidoid_do_produtoquantidade
1102481112
2102484210
310248725
410249149
510249142
6102495140
520104432812

Queremos encontrar entradas onde as colunas id_do_pedido e id_do_produto sejam idênticas. Este tipo de duplicata provavelmente significa que há um bug no sistema de pedidos, já que cada produto daquele pedido seria processado apenas uma vez no carrinho. Se várias quantidades desse produto forem pedidas, o valor quantidade apenas aumentaria; linhas separadas (duplicatas) não deveriam ser criadas. Uma falha deste tipo pode afetar negativamente as operações comerciais se os pedidos forem atendidos, embalados e enviados automaticamente.

Para encontrar duplicatas em valores de várias colunas, podemos usar a consulta abaixo. Ela é muito parecida com a consulta para uma coluna:

SELECT id_do_pedido, id_do_produto, COUNT(*)
FROM informacoes_do_pedido
GROUP BY id_do_pedido, id_do_produto
HAVING COUNT(*) > 1 

RESULTADO

Número de Registros: 2

Aqui, podemos confirmar que o sistema de pedidos tem, de fato, um bug. Como no primeiro exemplo utilizando uma única coluna, neste segundo exemplo também conseguimos encontrar erros no sistema. Neste caso, os produtos estão sendo registrados como um novo pedido, embora tenham sido adicionados ao mesmo carrinho pelo mesmo cliente. Agora, como dono da empresa, você poderia corrigir este erro no seu sistema de gerenciamento de pedidos.

Note que no exemplo acima usamos COUNT(*) e não um contador específico de coluna como COUNT(id_do_pedido). COUNT(*) conta todas as linhas, enquanto COUNT (Coluna) conta apenas valores não-nulos na coluna especificada. Entretanto, neste exemplo, não faria diferença - não havia valores nulos em nenhuma das duas colunas agrupadas.

Trabalhando com Valores Duplicados

Encontrar duplicatas em SQL é principalmente uma questão de verificação de qualidade/racionalidade e de validação de dados. Essas verificações são frequentemente utilizadas no dia a dia de muitas pequenas e médias empresas.

Além disso, esta é uma questão muito comum em entrevistas para cargos de cientista/analista de dados! Por isso, é ótimo que agora você saiba o básico de como abordar esta questão. Ainda assim, você precisará praticar mais para entender as nuances e a singularidade de cada conjunto de dados e quais critérios você deve aplicar em verificações de racionalidade e qualidade.

Para lidar melhor com registros duplicados, recomendo o curso da LearnSQL SQL para Iniciantes, que abrange estes conceitos de forma completa, com diversos exercícios práticos.