DISTINCT em várias colunas
Exclusividade entre combinações.
DISTINCT em várias colunas é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 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 usar várias colunas?
Você já sabe que SELECT DISTINCT remove linhas duplicadas. Mas o que significa "duplicata" quando sua consulta retorna várias colunas?
Uma linha só é considerada duplicata quando todas as colunas selecionadas têm o mesmo valor que outra linha. Se até mesmo uma coluna for diferente, ambas as linhas serão mantidas.
Tabela de exemplo: pedidos
Vamos criar uma pequena tabela de pedidos para fazer alguns testes. Ela armazena qual cliente comprou de qual categoria e em qual país.
CREATE TABLE orders (
id INTEGER,
customer VARCHAR(50),
category VARCHAR(50),
country VARCHAR(50)
);
INSERT INTO orders VALUES
(1, 'Alice', 'Electronics', 'US'),
(2, 'Alice', 'Books', 'US'),
(3, 'Bob', 'Electronics', 'UK'),
(4, 'Alice', 'Electronics', 'US'),
(5, 'Bob', 'Electronics', 'UK'),
(6, 'Carol', 'Clothing', 'CA');DISTINCT em uma coluna
Um lembrete rápido: usar DISTINCT em uma única coluna retorna apenas cada valor exclusivo dessa coluna.
Aqui, obtemos cada nome de cliente sem repetições — apenas três linhas, embora existam seis pedidos.
SELECT DISTINCT customer
FROM orders;DISTINCT em duas colunas
Agora, adicione uma segunda coluna. A palavra-chave DISTINCT ainda aparece apenas uma vez, logo após SELECT. O banco de dados trata cada par exclusivo (cliente, categoria) como uma linha.
Alice aparece duas vezes — uma vez para Eletrônicos e outra para Livros — porque essas são duas combinações diferentes.
SELECT DISTINCT customer, category
FROM orders;Como a exclusividade é verificada
O banco de dados compara instantâneos completos das linhas. Para que DISTINCT elimine uma linha, todas as colunas da lista SELECT precisam corresponder exatamente a uma linha já vista.
Em nossa tabela de pedidos, as linhas 3 e 5 são ambas (Bob, Eletrônicos, UK) — uma correspondência perfeita em todas as três colunas — então uma delas é eliminada.
SELECT DISTINCT customer, category, country
FROM orders;
-- Row (Bob, Electronics, UK) appears only once
-- even though it occurs on rows 3 and 5Uma correspondência parcial não é eliminada
Alice tem duas linhas com categoria = Eletrônicos, mas ambas têm país = US. Com as três colunas selecionadas, essas duas linhas originais são idênticas, então apenas uma permanece.
Altere a seleção, e o teste de exclusividade também mudará.
-- Select only customer + country
-- (Alice, US) appears twice in the table but DISTINCT keeps it once
SELECT DISTINCT customer, country
FROM orders;
-- Now add category back — uniqueness recalculated
SELECT DISTINCT customer, category, country
FROM orders;Caso de uso real: combinações distintas
Um padrão comum é encontrar todas as combinações distintas de dois atributos — por exemplo, quais categorias de produtos são vendidas em quais países, independentemente de quantas vezes cada venda ocorreu.
SELECT DISTINCT category, country
FROM orders
ORDER BY category, country;Combinando DISTINCT com WHERE
Você pode filtrar as linhas primeiro com WHERE e, em seguida, DISTINCT remove as duplicatas do resultado filtrado. As duas cláusulas funcionam de forma independente — WHERE restringe os dados, e DISTINCT elimina as duplicatas.
SELECT DISTINCT customer, category
FROM orders
WHERE country = 'US';DISTINCT versus GROUP BY
Uma forma equivalente de obter combinações distintas é usar GROUP BY. As duas abordagens produzem o mesmo resultado para a simples eliminação de duplicatas. A diferença é importante quando você quer agregações: GROUP BY permite adicionar COUNT(*), SUM() etc., enquanto DISTINCT não.
-- Using DISTINCT
SELECT DISTINCT customer, category
FROM orders;
-- Equivalent using GROUP BY
SELECT customer, category
FROM orders
GROUP BY customer, category;Contando combinações distintas
Colocar um DISTINCT com várias colunas dentro de uma subconsulta permite contar quantas combinações distintas existem. Essa é uma forma prática de medir a diversidade dos seus dados.
SELECT COUNT(*) AS unique_customer_category_pairs
FROM (
SELECT DISTINCT customer, category
FROM orders
) AS deduped;Erro comum: DISTINCT se aplica a todas as colunas
Um equívoco frequente é pensar que DISTINCT se aplica apenas à primeira coluna listada. Isso não acontece. DISTINCT sempre considera a linha inteira formada por todas as colunas selecionadas.
Você não pode usar DISTINCT apenas em algumas colunas mantendo duplicatas em outras — para isso, você precisa de funções de janela, como ROW_NUMBER().
-- This does NOT give distinct customers with any category
-- It gives distinct (customer, category) pairs
SELECT DISTINCT customer, category
FROM orders;
-- If you want one row per customer (any category), use:
SELECT customer, MIN(category) AS sample_category
FROM orders
GROUP BY customer;Verificação rápida
Teste sua compreensão sobre DISTINCT em várias colunas.
Resumo da lição
Excelente trabalho! Veja o que você aprendeu sobre usar DISTINCT em várias colunas:
- DISTINCT se aplica à linha inteira — todas as colunas selecionadas são verificadas em conjunto.
- Uma linha só é eliminada quando todas as colunas correspondem exatamente a uma linha já encontrada.
- Adicionar ou remover colunas da lista de SELECT altera quais linhas são consideradas duplicatas.
- Você pode combinar DISTINCT com WHERE e ORDER BY livremente.
- GROUP BY é uma alternativa equivalente e é necessário quando você também precisa de agregações.
Dominar o DISTINCT em várias colunas permite explorar combinações distintas com eficiência em qualquer conjunto de dados.
Perguntas Frequentes
A aula “DISTINCT em várias colunas” é grátis?
Sim — o texto completo de “DISTINCT em várias colunas” é 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 “DISTINCT em várias colunas”?
Exclusividade entre combinações. 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 2 de 4.
Quanto tempo leva a aula “DISTINCT em várias colunas”?
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