0Pricing
SQL Interview Prep · Aula

Compatibilidade de quantidade e tipos de colunas

Conheça as regras que os conjuntos de resultados devem satisfazer para serem combinados e os erros comuns de incompatibilidade.

Compatibilidade de quantidade e tipos de colunas é uma aula grátis de SQL Interview Prep 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 Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Interview Prep inclui 4 aulas no total.

As regras de compatibilidade que os entrevistadores verificam

Toda operação de conjuntos (UNION, INTERSECT, EXCEPT) exige que os dois conjuntos de resultados sejam compatíveis para uma operação de conjuntos. Os entrevistadores perguntam sobre isso para verificar se você conhece as formas silenciosas pelas quais essas consultas podem falhar.

Duas regras determinam a compatibilidade: a mesma quantidade de colunas e tipos de dados compatíveis, posição por posição. Se qualquer uma delas estiver errada, você obterá um erro ou um resultado surpreendente.

Regra 1: a mesma quantidade de colunas

As duas consultas precisam projetar a mesma quantidade de colunas. Se a primeira consulta retornar três colunas e a segunda retornar duas, o banco de dados rejeitará a instrução.

Esse é, de longe, o erro mais comum com operações de conjuntos em entrevistas, especialmente depois que alguém edita um ramo e se esquece do outro.

SELECT id, name, city FROM a
UNION
SELECT id, name FROM b;
-- ERROR: each UNION query must have the same number of columns

Regra 2: tipos compatíveis por posição

As colunas são associadas pela posição, não pelo nome. A primeira coluna da primeira consulta corresponde à primeira coluna da segunda consulta, e assim por diante. Cada par precisa ter tipos compatíveis.

Em geral, compatível significa que pode haver conversão implícita: um INT e um BIGINT são compatíveis; um INT e uma DATE geralmente não são.

SELECT id, signup_date FROM a
UNION
SELECT id, signup_date FROM b;
-- positions: (int,date) vs (int,date) -> OK

A posição, não o nome, é o que importa

Uma armadilha sutil: as colunas podem ter nomes diferentes e ainda assim ser combinadas, desde que as posições correspondam quanto ao tipo. Por outro lado, nomes iguais na ordem errada desalinhariam os dados.

Sempre leia as operações de conjuntos considerando as colunas pela posição. Os entrevistadores colocam colunas trocadas para testar isso.

SELECT name, id FROM a
UNION ALL
SELECT id, name FROM b;
-- name<->id swapped: types may clash or data lands in wrong column

Os nomes das colunas de saída

O conjunto de resultados recebe seus nomes de colunas da primeira consulta. Os rótulos da segunda consulta são descartados. Para controlar os cabeçalhos, renomeie as colunas no primeiro ramo.

É por isso que um ORDER BY posterior precisa referenciar os nomes da primeira consulta ou usar posições ordinais.

SELECT id AS user_id, city AS location FROM a
UNION ALL
SELECT id, town FROM b;
-- output headers: user_id, location

Conversão implícita de tipos

Quando duas colunas associadas pela posição têm tipos diferentes, mas compatíveis, o mecanismo escolhe um tipo de resultado amplo o suficiente para comportar ambos. Uma combinação de INT com DECIMAL geralmente produz DECIMAL.

Mencionar essa conversão em uma entrevista demonstra conhecimento aprofundado: você sabe que a coluna não gera um erro, mas é promovida para o tipo mais abrangente.

SELECT amount FROM int_table   -- INT
UNION ALL
SELECT amount FROM dec_table;  -- DECIMAL
-- result column is DECIMAL

Preenchendo colunas ausentes com NULL

Quando duas consultas naturalmente têm estruturas diferentes, você as alinha adicionando colunas substitutas. Uma técnica comum é selecionar NULL (geralmente convertido para um tipo) para preencher uma posição existente no outro ramo.

Converter NULL evita que o mecanismo tente adivinhar um tipo e mantém as colunas compatíveis.

SELECT id, phone, CAST(NULL AS VARCHAR) AS email FROM a
UNION ALL
SELECT id, CAST(NULL AS VARCHAR), email FROM b;

Uma falha de incompatibilidade de tipos na prática

Aqui, a segunda coluna é uma data em um ramo e uma cadeia de caracteres no outro. Mecanismos rigorosos rejeitam isso; mecanismos permissivos podem fazer uma conversão imprevisível. A solução segura é usar um CAST explícito para que os dois lados concordem.

Em entrevistas, proponha a conversão explícita em vez de depender da conversão implícita.

SELECT id, CAST(event_date AS VARCHAR) FROM a
UNION ALL
SELECT id, label FROM b;
-- both second columns now VARCHAR -> compatible

Essas regras se aplicam a todos os operadores de conjuntos

As regras de quantidade de colunas e compatibilidade de tipos são idênticas para UNION, UNION ALL, INTERSECT e EXCEPT. Todos empilham conjuntos de resultados verticalmente e exigem entradas compatíveis para uma operação de conjuntos.

Assim, uma única lista mental serve para todas as operações de conjuntos: contar as colunas, verificar os tipos por posição e controlar os nomes a partir da primeira consulta.

SELECT id, city FROM a
INTERSECT
SELECT id, city FROM b;
-- same compatibility rules as UNION

A lista de verificação prévia

Antes de combinar conjuntos de resultados, verifique:

  • A mesma quantidade de colunas em todos os ramos.
  • Cada par por posição é compatível quanto ao tipo (faça uma conversão explícita se tiver dúvida).
  • As colunas estão na mesma ordem lógica.
  • Os nomes das colunas estão definidos na primeira consulta para produzir nomes de saída claros.

Recitar essa lista em voz alta durante uma entrevista evita falhas silenciosas de desalinhamento.

Reunindo tudo

As falhas de compatibilidade são, em sua maioria, evitáveis. Os erros são evidentes quando as quantidades de colunas diferem e silenciosos quando as colunas são trocadas ou convertidas de forma inesperada. Ler as consultas coluna por coluna e fazer conversões explícitas mantém as operações de conjuntos corretas.

Uma resposta segura menciona as duas regras, destaca a correspondência por posição e observa que os nomes da saída vêm da primeira consulta.

Verificação rápida

Como o SQL decide quais colunas de dois ramos de UNION correspondem entre si?

Resumo

Principais conclusões:

  • Todos os operadores de conjuntos precisam da mesma quantidade de colunas em todos os ramos.
  • As colunas são associadas pela posição, e cada par precisa ser compatível quanto ao tipo.
  • Tipos compatíveis podem ser convertidos para um tipo comum mais abrangente.
  • Use CAST(NULL AS type) para preencher estruturas diferentes.
  • Os nomes da saída vêm da primeira consulta.

Perguntas Frequentes

A aula “Compatibilidade de quantidade e tipos de colunas” é grátis?

Sim — o texto completo de “Compatibilidade de quantidade e tipos de 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 Interview Prep, atualize para CoddyKit PRO. O curso de SQL Interview Prep inclui 4 aulas no total.

O que vou aprender em “Compatibilidade de quantidade e tipos de colunas”?

Conheça as regras que os conjuntos de resultados devem satisfazer para serem combinados e os erros comuns de incompatibilidade. Você pratica SQL Interview Prep 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 Interview Prep?

Nenhuma experiência prévia é necessária. SQL Interview Prep 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 “Compatibilidade de quantidade e tipos de 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 Interview Prep?

Sim. Cada aula de SQL Interview Prep 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. UNION versus UNION ALL
  2. Compatibilidade de quantidade e tipos de colunas
  3. INTERSECT e EXCEPT para comparação
  4. Emulando operações de conjuntos com junções
← Voltar para SQL Interview Prep