CodeGym /Cursos /SQL SELF /Extraindo valores únicos com DISTINCT

Extraindo valores únicos com DISTINCT

SQL SELF
Nível 6 , Lição 1
Disponível

Às vezes os bancos de dados parecem aquela pessoa que anota tudo mas esquece o que já escreveu. Você abre a tabela com as cidades dos clientes e tem dez "Berlim", cinco "Seattle" e um monte de repetido. Isso rola quando a mesma cidade aparece pra clientes diferentes. Mas você não quer fazer uma campanha de marketing pra dez "Berlim" se é só uma cidade, né?

Pra pegar só os valores únicos — sem duplicados — tem um comando massa chamado DISTINCT. Ele é tipo uma vassoura mágica: num passe só tira as linhas repetidas e deixa só o que realmente é diferente.

DISTINCT deixa você extrair só as linhas únicas do resultado da query. Isso é útil quando você quer se livrar de dados repetidos, tipo:

  • Produtos únicos nos pedidos.
  • Nomes únicos de clientes.
  • Combinações únicas de dados, tipo "cidade + país".

Como funciona o DISTINCT?

A sintaxe do DISTINCT é simples e direta, como quase tudo no SQL:

SELECT DISTINCT coluna1, coluna2, ...
FROM tabela;

Quando você coloca DISTINCT na query, o banco de dados garante que cada linha do resultado vai ser única.

Exemplos de uso do DISTINCT

Bora começar com exemplos clássicos pra sacar como o DISTINCT funciona.

Exemplo 1: Valores únicos de uma coluna só

Imagina que a gente tem uma tabela students com dados dos estudantes:

-- Tabela students

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Toronto
3 Anna Song Seattle
4 Nat Cole Chicago
5 Maria Chi Seattle

A gente quer saber de quais cidades vêm os estudantes. Escreve a query

SELECT city
FROM students;

e recebe esse resultado:

city
Seattle
Toronto
Seattle
Chicago
Seattle

Não era bem isso que a gente queria :(

Pra tirar os duplicados tem que usar o DISTINCT:

SELECT DISTINCT city
FROM students;

Resultado:

city
Seattle
Toronto
Chicago

Sem o DISTINCT no resultado a gente vê "Seattle" três vezes, mas o que a gente queria era só uma vez cada cidade.

Exemplo 2: Valores únicos de várias colunas

Agora imagina que a gente quer pegar combinações únicas de "nome + sobrenome", porque pode ter estudante com o mesmo nome ou sobrenome.

A tabela students é a mesma:

-- Tabela students

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Toronto
3 Anna Song Seattle
4 Nat Cole Chicago
5 Maria Chi Seattle

Query:

SELECT DISTINCT first_name, last_name
FROM students;

Resultado:

first_name last_name
Maria Chi
Alex Lin
Anna Song
Nat Cole

Então, o DISTINCT funciona como um filtro: ele olha todas as colunas que você colocou e só tira as linhas repetidas se todas essas colunas forem iguais.

Exemplo 3: Combinações únicas e ordenação

Agora vamos juntar DISTINCT com ORDER BY pra pegar os valores únicos e ainda deixar em ordem alfabética pelo sobrenome.

De novo, a tabela students:

-- Tabela students

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Toronto
3 Anna Song Seattle
4 Nat Cole Chicago
5 Maria Chi Seattle

Query:

SELECT DISTINCT first_name, last_name
FROM students
ORDER BY last_name ASC;

Resultado:

first_name last_name
Maria Chi
Nat Cole
Alex Lin
Anna Song

As linhas duplicadas sumiram e os sobrenomes ficaram em ordem alfabética.

Exemplo 4: Usando em agregações

E se a gente tentar usar DISTINCT numa função, tipo COUNT?

SELECT COUNT(DISTINCT city) AS unique_city_count
FROM students;

Resultado:

unique_city_count
3

Essa query vai te dar a quantidade de cidades únicas. Bem prático, né?

Coisas pra ficar ligado no DISTINCT

Quando usar o DISTINCT é importante lembrar que ele funciona pra todas as colunas que você colocou. Se você botar mais colunas na query, o resultado pode mudar.

Exemplo 5: Por que é importante entender o contexto?

Se você colocar mais campos na query, isso pode mudar o que é considerado único.

SELECT DISTINCT first_name, city
FROM students;

Tabela students:

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Austin
3 Anna Song Seattle
4 Otto Art Denver
5 Maria Chi Portland

Resultado:

first_name city
Maria Seattle
Alex Austin
Anna Seattle
Otto Denver
Maria Portland

Cada combinação "nome + cidade" agora é única. Então lembra: o que é considerado único depende de todas as colunas que você colocou, não de cada coluna separada.

Erros comuns usando DISTINCT

Um dos erros mais comuns ao usar DISTINCT é não entender direito o que a query faz. Por exemplo, se você colocar coluna demais, pode acabar com um resultado bem diferente do que esperava, porque o que é único vai ser definido por todas as colunas.

Por exemplo:

SELECT DISTINCT *
FROM students;

Nesse caso, cada linha vai ser considerada única, porque todas as colunas entram na conta.

Outro erro é usar DISTINCT onde não precisa. Se você já sabe que os dados são únicos (tipo uma coluna que é chave primária), o DISTINCT só vai deixar o banco mais lento à toa.

2
Tarefa
SQL SELF, nível 6, lição 1
Bloqueado
Cidades únicas dos clientes
Cidades únicas dos clientes
2
Tarefa
SQL SELF, nível 6, lição 1
Bloqueado
Combinações únicas de nome e sobrenome
Combinações únicas de nome e sobrenome
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION