Questão de Banco de Dados — Banco de Dados Relacionais — FGV 2024
Banco de Dados›Banco de Dados Relacionais
Código
fg098510
Banca
FGV
Órgão
TJ-MS
Ano
2024
Nível
Superior
Cargo
Técnico de Nível Superior - Analista de Sistemas Computacionais - Analista de Sistemas
Observe as tabelas A e B, que possuem 10 e 12 registros, respectivamente:Após executar diferentes tipos de junções entre essas tabelas, o total de registros retornados em cada caso, sendo eles INNER JOIN, RIGHT JOIN, FULL OUTER JOIN, CROSS JOIN e LEFT JOIN, é, respectivamente:
A10, 12, 22, 120 e 10;
B9, 10, 13, 120 e 10;
C9, 12, 13, 120 e 10;
D9, 12, 22, 120 e 10;
E9, 12, 13, 22 e 10.
Revelar gabarito e comentário▾
GabaritoC — 9, 12, 13, 120 e 10;
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Junções SQL: contagem de registros em INNER, RIGHT, FULL, CROSS e LEFT JOIN
Gabarito: letra C. A questão pede a contagem de registros retornados por cinco tipos de junção entre duas tabelas, A (10 registros) e B (12 registros), com base na figura que mostra os valores correspondentes. A sequência correta é 9, 12, 13, 120 e 10, pois: o INNER JOIN retorna 9 registros (apenas as correspondências), o RIGHT JOIN retorna 12 (todos os registros da tabela B, mesmo sem correspondência em A), o FULL OUTER JOIN retorna 13 (todos os registros de ambas, com 9 correspondências + 4 exclusivos de B), o CROSS JOIN retorna 120 (produto cartesiano: 10 × 12) e o LEFT JOIN retorna 10 (todos os registros da tabela A).
Para entender a questão, é essencial dominar o conceito de cada tipo de junção em SQL. A junção (JOIN) combina linhas de duas tabelas com base em uma condição de correspondência entre colunas. O INNER JOIN retorna apenas as linhas que possuem correspondência em ambas as tabelas, ou seja, a interseção. O LEFT JOIN (ou LEFT OUTER JOIN) retorna todas as linhas da tabela à esquerda e as correspondências da tabela à direita; quando não há correspondência, os campos da tabela à direita são preenchidos com NULL. O RIGHT JOIN (ou RIGHT OUTER JOIN) é o inverso: retorna todas as linhas da tabela à direita e as correspondências da tabela à esquerda. O FULL OUTER JOIN retorna todas as linhas de ambas as tabelas, preenchendo com NULL onde não há correspondência. Por fim, o CROSS JOIN retorna o produto cartesiano, ou seja, cada linha da tabela A combinada com cada linha da tabela B, sem necessidade de condição de correspondência. Com base nos dados da figura, podemos deduzir as contagens: a tabela A tem 10 registros e a tabela B tem 12. O INNER JOIN retorna 9 registros, indicando que há 9 pares de valores correspondentes entre as tabelas. O RIGHT JOIN retorna 12 registros, pois preserva todos os registros da tabela B (12), mesmo aqueles sem correspondência em A. O FULL OUTER JOIN retorna 13 registros: os 9 correspondentes + os registros exclusivos de A (10 - 9 = 1) + os registros exclusivos de B (12 - 9 = 3), totalizando 9 + 1 + 3 = 13. O CROSS JOIN retorna 10 × 12 = 120 registros. O LEFT JOIN retorna 10 registros, preservando todos os registros da tabela A. A pegadinha da questão está em confundir o RIGHT JOIN com o LEFT JOIN. Muitos candidatos podem pensar que o RIGHT JOIN retorna o mesmo número de registros que a tabela da esquerda, mas na verdade ele preserva os registros da tabela da direita. Além disso, é comum errar o cálculo do FULL OUTER JOIN, somando simplesmente os totais das duas tabelas (10 + 12 = 22) em vez de considerar apenas os registros exclusivos de cada uma. A alternativa A, por exemplo, apresenta 22 para o FULL OUTER JOIN, o que seria o resultado se não houvesse correspondências entre as tabelas. A alternativa E apresenta 22 para o CROSS JOIN, o que é um erro, pois o produto cartesiano é 120. Para resolver questões como esta, é fundamental entender a semântica de cada junção e saber calcular o número de registros resultantes. A tabela abaixo resume as contagens para cada tipo de junção, considerando os dados da figura:
Tipo de Junção
Registros Retornados
Explicação
INNER JOIN
9
Apenas as correspondências entre A e B
RIGHT JOIN
12
Todos os registros de B + correspondências de A
FULL OUTER JOIN
13
Todos os registros de A e B, sem duplicar as correspondências
CROSS JOIN
120
Produto cartesiano: 10 × 12
LEFT JOIN
10
Todos os registros de A + correspondências de B
NÃO CAIA NESSA!
A banca explora a confusão entre RIGHT JOIN e LEFT JOIN, além de induzir ao erro no cálculo do FULL OUTER JOIN. No RIGHT JOIN, o número de registros é o total da tabela da direita (12), não da esquerda. No FULL OUTER JOIN, não se soma os totais das duas tabelas (10 + 12 = 22); soma-se as correspondências (9) com os exclusivos de cada tabela (1 de A e 3 de B), resultando em 13. Fique atento a essas inversões!
Alternativa A — ❌ Incorreta
Apresenta 10 para o INNER JOIN, o que está errado, pois o INNER JOIN retorna apenas as correspondências (9), não todos os registros da tabela A. Além disso, apresenta 22 para o FULL OUTER JOIN, que seria o resultado se não houvesse correspondências entre as tabelas, mas há 9 correspondências, então o correto é 13.
Alternativa B — ❌ Incorreta
Apresenta 10 para o RIGHT JOIN, mas o correto é 12, pois o RIGHT JOIN preserva todos os registros da tabela da direita (B). O valor 10 corresponde ao LEFT JOIN, que preserva os registros da tabela da esquerda (A).
Alternativa C — ✅ Correta ⟵ GABARITO
Apresenta a sequência correta: 9 (INNER JOIN), 12 (RIGHT JOIN), 13 (FULL OUTER JOIN), 120 (CROSS JOIN) e 10 (LEFT JOIN). Cada valor está de acordo com a semântica de cada junção e com os dados da figura.
Alternativa D — ❌ Incorreta
Apresenta 22 para o FULL OUTER JOIN, que seria o resultado se não houvesse correspondências entre as tabelas. Como há 9 correspondências, o FULL OUTER JOIN retorna 13 (9 correspondências + 1 exclusivo de A + 3 exclusivos de B).
Alternativa E — ❌ Incorreta
Apresenta 22 para o CROSS JOIN, mas o produto cartesiano de 10 × 12 é 120. O valor 22 seria a soma simples dos totais das duas tabelas, o que não corresponde a nenhum tipo de junção. Gabarito: letra C