0Pricing
SQL Academy · Aula

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 5

Uma 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

  1. Noções básicas de SELECT DISTINCT
  2. DISTINCT em várias colunas
  3. DISTINCT ON do PostgreSQL
  4. Contando valores exclusivos
← Voltar para SQL Academy