Noções básicas de SELECT DISTINCT
Retorne apenas linhas exclusivas.
Noções básicas de SELECT DISTINCT é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
Por que as duplicatas acontecem
As tabelas frequentemente contêm valores repetidos. Uma tabela customers pode listar a mesma city em milhares de linhas. Quando você se importa apenas com o conjunto de valores distinct, um SELECT simples retorna todas as linhas, incluindo as repetições.
SELECT DISTINCT reduz as linhas idênticas a uma só. Nesta lição, você aprenderá os conceitos básicos de como retornar apenas resultados únicos.
SELECT city FROM customers;
-- Returns one row per customer, with many repeated citiesA palavra-chave DISTINCT
DISTINCT vem logo depois de SELECT. Ela remove linhas duplicadas do conjunto de resultados, mantendo apenas uma cópia de cada combinação exclusiva das colunas selecionadas.
SELECT DISTINCT city
FROM customers;
-- One row per unique cityDISTINCT se aplica à linha inteira
Um equívoco comum é pensar que DISTINCT se aplica a uma única coluna. Na verdade, ele se aplica à linha selecionada inteira. Cada coluna listada participa da decisão sobre duas linhas serem duplicatas.
Abaixo, as linhas são deduplicadas apenas pelo valor de city, porque essa é a única coluna selecionada.
SELECT DISTINCT country
FROM customers;
-- Unique countries across all customersDados de exemplo
Imagine uma pequena tabela orders. Observe os valores repetidos de status e country. Usaremos esse formato ao longo de toda a lição.
id=1, status='paid', country='US'id=2, status='paid', country='US'id=3, status='shipped', country='DE'id=4, status='paid', country='DE'
CREATE TABLE orders (
id int PRIMARY KEY,
status text,
country text,
amount numeric(10,2)
);Uma única coluna distinct
Selecionar DISTINCT status dos dados de exemplo retorna os valores exclusivos de status: paid e shipped. As quatro linhas são reduzidas a duas.
SELECT DISTINCT status
FROM orders;
-- paid
-- shippedNULL é tratado como um único valor
Embora NULL normalmente não seja igual a nada, nem mesmo a si próprio, DISTINCT trata todos os valores NULL como um único grupo. Se uma coluna tiver muitas linhas com NULL, você obterá exatamente um NULL no resultado distinct.
SELECT DISTINCT shipped_at
FROM orders;
-- All NULL shipped_at rows collapse into a single NULL rowDISTINCT com ORDER BY
Geralmente, você vai querer os valores exclusivos ordenados. DISTINCT é executado primeiro para criar o conjunto sem repetições; depois, ORDER BY o ordena. Qualquer coluna em ORDER BY também deve aparecer na lista de SELECT ao usar DISTINCT.
SELECT DISTINCT country
FROM orders
ORDER BY country;
-- DE
-- USDISTINCT versus GROUP BY
SELECT DISTINCT col e SELECT col GROUP BY col produzem as mesmas linhas sem repetições. Use DISTINCT quando quiser apenas valores exclusivos; recorra a GROUP BY quando também precisar de agregações, como COUNT por grupo.
-- These two return the same set of countries:
SELECT DISTINCT country FROM orders;
SELECT country FROM orders
GROUP BY country;DISTINCT tem um custo
Remover duplicatas não é gratuito. O banco de dados precisa ordenar ou criar um hash de todas as linhas candidatas para encontrar as exclusivas. Em tabelas grandes, isso aumenta o trabalho de CPU e memória; portanto, peça DISTINCT apenas quando realmente precisar de valores sem repetições.
-- Avoid blind DISTINCT on every query.
-- If the column is already unique (e.g. a PRIMARY KEY),
-- DISTINCT does nothing useful but still costs work:
SELECT DISTINCT id FROM orders; -- id is already uniqueDISTINCT em expressões
Você pode aplicar DISTINCT a uma expressão calculada, e não apenas a uma coluna bruta. O banco de dados avalia a expressão para cada linha e depois deduplica os resultados.
SELECT DISTINCT upper(country) AS country_code
FROM orders
ORDER BY country_code;
-- DE
-- USCriando uma lista de opções
Um uso prático de DISTINCT é preencher uma lista suspensa ou de filtros em uma aplicação: buscar os estados sem repetições para mostrar ao usuário todas as opções possíveis que existem atualmente nos dados.
SELECT DISTINCT status
FROM orders
ORDER BY status;
-- paid
-- shippedVerificação rápida
Onde fica a palavra-chave DISTINCT e o que ela deduplica?
Resumo
Você aprendeu os conceitos básicos de SELECT DISTINCT:
- Ele remove linhas duplicadas do conjunto de resultados.
- Aplica-se à linha selecionada inteira, e não a uma única coluna.
- Todos os valores
NULLsão reduzidos a um único valor. ORDER BYé executado após a deduplicação; suas colunas precisam ser selecionadas.- Ele exige trabalho adicional, portanto use-o apenas quando necessário.
A seguir: estendendo DISTINCT a várias colunas.
SELECT DISTINCT status
FROM orders
ORDER BY status;Perguntas Frequentes
A aula “Noções básicas de SELECT DISTINCT” é grátis?
Sim — o texto completo de “Noções básicas de SELECT DISTINCT” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Noções básicas de SELECT DISTINCT”?
Retorne apenas linhas exclusivas. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Noções básicas de SELECT DISTINCT”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Noções básicas de SELECT DISTINCT
- DISTINCT em várias colunas
- DISTINCT ON do PostgreSQL
- Contando valores exclusivos