Voltar para a lista de artigos Artigos
7 minutos de leitura

Qual é o papel do DISTINCT em SQL?

A palavra-chave DISTINCT em SQL desempenha um papel importante na remoção de valores duplicados de seus resultados. Este artigo fornece exemplos que mostram exatamente como o DISTINCT funciona.

Por padrão, as consultas SQL mostram todas as linhas retornadas, incluindo as linhas duplicadas, no conjunto de resultados. A palavra-chave DISTINCT na cláusula SELECT é usada para eliminar linhas duplicadas e exibir uma lista única de valores. Em outras palavras, a palavra-chave DISTINCT recupera valores únicos a partir de uma tabela.

A sintaxe básica da palavra-chave DISTINCT em SQL é:

SELECT DISTINCT
  column_1,
  column_2,
  …,
  column_n
FROM table_name

(Se você achar a sintaxe acima confusa, considere LearnSQL.com.br's SQL para Iniciantes curso. Ela cobre os fundamentos da SQL, incluindo a palavra-chave DISTINCT ).

Note que a palavra-chave DISTINCT deve ser colocada antes das colunas que você especificar. Você pode especificar mais de uma coluna para ser DISTINCT, o que fará com que SQL retorne somente combinações únicas dos valores dessas colunas. Se você selecionar mais de uma coluna, todas as colunas serão combinadas e somente a singularidade da linha será considerada. SQL DISTINCT procura por uma linha distinta, ao invés de uma coluna distinta.

Vamos ver a palavra-chave DISTINCT em ação com um exemplo prático. Primeiro, porém, devemos nos familiarizar com os dados com os quais estaremos trabalhando. Imagine que temos uma tabela chamada employee_infoque contém detalhes sobre os funcionários de nossa empresa:

employee_idfirst_namelast_namedepartmentage
127374JoshuaReesSales26
293421KarenBowerSales45
244813LukePayneNULL42
463281MaxPaigeHuman Resources53
374241JuliaGloverHuman Resources29
568421RoseHarrisHuman Resources43
NULLNULLNULLNULLNULL
839211OliviaBakerSales32
293493KarenBowerSales45
463281MaxPaigeHuman Resources53
244813LukePayneNULL42
933821BernadetteParsonsSalesNULL

SQL DISTINCT em uma única coluna

Vamos ver o efeito da palavra-chave DISTINCT quando tentamos SELECT a coluna employee_id. Primeiro, aqui está a consulta antes de aplicar a palavra-chave DISTINCT:

SELECT employee_id
FROM employee_info

Isto resulta no seguinte:

employee_id
127374
293421
244813
463281
374241
568421
NULL
839211
293493
463281
244813
933821

A execução desta consulta retorna a coluna inteira employee_id de nossa tabela. Esta coluna corresponde à employee_info tabela exatamente. Em uma análise mais detalhada, podemos ver alguns valores duplicados - 244813 e 463281 cada um aparece duas vezes.

Vamos adicionar a palavra-chave DISTINCT para endereçar estes valores duplicados. Lembre-se, adicionamos a palavra-chave DISTINCT antes de especificarmos as colunas:

SELECT DISTINCT employee_id 
FROM employee_info
employee_id
127374
293421
244813
463281
374241
568421
NULL
839211
293493
933821

Nosso conjunto de dados resultante parece mais curto; há várias coisas que podemos aprender com esta resposta.

SQL DISTINCT Remove Valores Duplicados

Se contrastarmos a tabela original com nosso resultado, podemos ver que as duplicatas foram filtradas com sucesso. O uso da palavra-chave DISTINCT é apenas um método para remover valores duplicados, como mostra este artigo sobre as diferentes maneiras de remover duplicatas em SQL.

O employee_info A tabela continha duas ocorrências dos seguintes valores:

employee_id
244813
463281

Entretanto, nosso resultado agora mostra estes valores apenas uma vez. A palavra-chave DISTINCT teve o efeito desejado.

Preste atenção às colunas utilizadas

Quando você vê pela primeira vez a employee_info tabela, parece que estas filas são duplicatas.

employee_idfirst_namelast_namedepartmentage
293421KarenBowerSales45
293493KarenBowerSales45

Em uma inspeção mais detalhada, você pode ver que o valor de employee_id é diferente. Como aplicamos a palavra-chave DISTINCT a esta coluna employee_id, ambos os valores são devolvidos.

A inclusão dos valores NULL

Você provavelmente notou a presença de valores NULL no conjunto de dados devolvidos. Em SQL, NULL é considerado um valor único, o que significa que será retornado ao usar a palavra-chave DISTINCT. Se você gostaria de remover os valores NULL do resultado, você poderia escrever a seguinte consulta:

SELECT DISTINCT
  * 
FROM employee_info 
WHERE employee_id IS NOT NULL

SQL DISTINCT com uma Subconsulta

Você também pode usar a palavra-chave DISTINCT como parte de uma subconsulta. Entretanto, vale a pena mencionar que uma subconsulta IN, ANY, ou EXISTS avalia a verdade se há pelo menos uma linha que faz com que a subconsulta avalie a verdade. Isto torna desnecessário o uso de uma DISTINCT com uma subconsulta IN, ANY, ou EXISTS.

SQL DISTINCT com Múltiplas Colunas

As colunas que você especifica como DISTINCT desempenham um papel fundamental no que os dados são devolvidos. Veja a consulta a seguir:

SELECT DISTINCT
  employee_id,
  first_name,
  last_name 
FROM employee_info

Estamos à procura de combinações únicas destas três colunas. A execução desta consulta produz o seguinte resultado:

employee_idfirst_namelast_name
127374JoshuaRees
293421KarenBower
244813LukePayne
463281MaxPaige
374241JuliaGlover
568421RoseHarris
NULLNULLNULL
839211OliviaBaker
293493KarenBower
933821BernadetteParsons

Ao digitalizar este conjunto de resultados, você pode estar esperando ver nomes completamente únicos junto com seus employee_id. Por exemplo, olhe para estes dados:

employee_idfirst_namelast_name
293421KarenBower
293493KarenBower

O valor employee_id é único para ambas as linhas, o que significa que estas linhas também são consideradas únicas. Se alterarmos a consulta para o seguinte:

SELECT DISTINCT
  first_name,
  last_name 
FROM employee_info

... employee_id não é mais considerado; agora estamos procurando por combinações únicas de nomes. Assim, apenas uma linha para "Karen Bower" é mostrada:

first_namelast_name
JoshuaRees
KarenBower
LukePayne
MaxPaige
JuliaGlover
RoseHarris
NULLNULL
OliviaBaker
BernadetteParsons

Se você estiver lutando para alcançar os resultados desejados ao usar a palavra-chave DISTINCT, preste atenção especial às colunas que você incluiu. Se este exemplo específico ainda estiver lhe causando confusão, confira este artigo sobre como contar valores distintos em SQL.

SQL DISTINCT com Funções Agregadas

A palavra-chave DISTINCT pode ser usada ao lado de funções agregadas. As funções agregadas mais comuns são:

  • MIN() - Retorna o menor valor (mínimo).
  • MAX() - Devolve o maior (máximo) valor.
  • SUM() - Retorna a soma dos valores especificados.
  • AVG() - Retorna a média dos valores especificados (por exemplo, em uma coluna).
  • COUNT() - Devolve o número de itens (por exemplo, em uma coluna).

Quando DISTINCT é usado com SUM(), AVG(), e COUNT(), elimina valores duplicados antes que a soma, média ou contagem seja calculada. Enquanto você pode usar a palavra-chave DISTINCT com MIN() e MAX(), é inútil fazê-lo; isso não terá impacto nos resultados.

Vamos aplicar estas informações ao nosso exemplo anterior envolvendo a employee_info mesa. Se quiséssemos contar o número de funcionários que trabalham atualmente em nossa empresa enquanto tomamos o cuidado de remover as entradas duplicadas, escreveríamos a seguinte consulta:

SELECT COUNT(DISTINCT employee_id)
FROM employee_info

O resultado desta consulta é:

COUNT(DISTINCT employee_id)
9

Este seria o exemplo mais simples de como a palavra-chave DISTINCT pode ser usada em conjunto com funções agregadas. A execução desta consulta sem a palavra-chave DISTINCT incluiria valores duplicados na contagem:

SELECT COUNT(employee_id) 
FROM employee_info

O resultado desta consulta é: O resultado desta consulta é

COUNT(employee_id)
11

Se você acha que sua tabela pode conter registros duplicados, usar DISTINCT é uma excelente maneira de garantir que seus relatórios sejam precisos e não sejam afetados por valores duplicados. Se este caso de uso não estiver claro para você, recomendo a leitura deste artigo sobre a contagem de valores distintos em SQL. Há muitos outros casos de uso para COUNT(); para exemplos úteis adicionais, verifique este artigo explicando as diferenças entre as aplicações comuns da função COUNT().

DISTINTO com Funções Agregadas e GROUP BY

Vamos usar uma função agregada com a palavra-chave DISTINCT para nos ajudar a resolver um problema comum. Queremos encontrar em nossa tabela o número de entradas employee_id duplicadas potenciais para cada par de nomes. Queremos isolar o caso em que o nome do funcionário é exatamente o mesmo, mas com um employee_id diferente. Aqui está a consulta:

SELECT
  first_name,
  last_name,
  COUNT(DISTINCT employee_id) 
FROM employee_info 
GROUP BY first_name, last_name

E o resultado:

employee_idfirst_nameCOUNT (DISTINCT employee_id)
NULLNULL0
BernadetteParsons1
JoshuaRees1
JuliaGlover1
KarenBower2
LukePayne1
MaxPaige1
OliviaBaker1
RoseHarris1

Podemos ver a partir destes resultados que temos duas entradas diferentes para o employee_id de Karen Bower. Esta é uma excelente informação para se ter. Se não há duas pessoas diferentes chamadas Karen Bower trabalhando em nossa empresa, sabemos que esta informação foi inserida por engano e pode ser considerada uma duplicata a ser removida.

Aprender sobre o DISTINCT em SQL é apenas o começo!

A capacidade de isolar e excluir dados duplicados dos resultados de sua consulta é uma habilidade importante para todos os usuários de SQL. A palavra-chave DISTINCT desempenha um papel importante em sua capacidade de fazer isso de forma eficaz. Se você gostou deste artigo e quer continuar aprendendo sobre SQL, considere nosso Fundamentos de SQL learning track. Ele lhe ensinará instruções SQL básicas como WHERE, GROUP BY, ORDER BY, e HAVING. Você também aprenderá a JOIN tabelas e a adicionar, modificar ou remover dados de um banco de dados.