Pular para o conteúdo principal

Questão de Arquitetura de Software — Banco de Dados — VUNESP 2023

Arquitetura de SoftwareBanco de Dados
Código
vu079935
Banca
VUNESP
Órgão
TRF - 3ª REGIÃO
Ano
2023
Nível
Superior
Cargo
Analista Judiciário / Área: Apoio Especializado - Especialidade: Informática
Considere as duas seguintes tabelas de um banco de dados relacional:Curso (ID, Especialidade, Tipo)Aluno (Número, Nome, Cidade, ID)ID é chave estrangeira na tabela Aluno, com origem na chave primária ID de Curso.O comando SQL para obter o nome dos alunos, a especialidade e o tipo de curso em que estão matriculados é:
  1. ASELECT Nome, Especialidade, TipoFROM Curso, Aluno;
  2. BSELECT Nome, Especialidade, TipoFROM Curso.ID = Aluno.ID;
  3. CSELECT Nome, Especialidade, TipoFROM Curso, AlunoWHERE ID = ID;
  4. DSELECT Nome, Especialidade, TipoFROM Curso, Aluno (Curso.ID = Aluno.ID);
  5. ESELECT Nome, Especialidade, TipoFROM Curso, AlunoWHERE Curso.ID = Aluno.ID;
Revelar gabarito e comentário

GabaritoE — SELECT Nome, Especialidade, Tipo FROM Curso, Aluno WHERE Curso.ID = Aluno.ID;

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”.

Comando SQL para consulta com múltiplas tabelas

Gabarito: letra E. Para obter dados de duas tabelas relacionadas (Curso e Aluno), é necessário usar uma junção (JOIN) com a condição correta de igualdade entre as chaves. A sintaxe válida é SELECT ... FROM tabela1, tabela2 WHERE tabela1.coluna = tabela2.coluna, qualificando as colunas com o nome da tabela para evitar ambiguidade. A alternativa E apresenta exatamente essa forma.

Alternativa A — ❌ Incorreta

FROM Curso, Aluno sem cláusula WHERE gera um produto cartesiano (todas as combinações possíveis entre as linhas das duas tabelas), o que não produz o resultado desejado e normalmente é um erro lógico.

Alternativa B — ❌ Incorreta

FROM Curso.ID = Aluno.ID é uma sintaxe inválida. A cláusula FROM deve listar tabelas, não condições. A condição de junção deve vir na cláusula WHERE ou em JOIN explícito.

Alternativa C — ❌ Incorreta

WHERE ID = ID é ambíguo porque ambas as tabelas possuem a coluna ID. Em muitos SGBDs isso resulta em erro de ambiguidade ou em uma comparação incorreta (a mesma coluna consigo mesma, dependendo da implementação). A forma correta é qualificar com o nome da tabela.

Alternativa D — ❌ Incorreta

FROM Curso, Aluno (Curso.ID = Aluno.ID) — a sintaxe com parênteses dessa forma não é reconhecida pelo SQL padrão. Não é possível colocar a condição de junção entre parênteses após a lista de tabelas dessa maneira.

Alternativa E — ✅ Correta ⟵ GABARITO

FROM Curso, Aluno WHERE Curso.ID = Aluno.ID é a sintaxe clássica e correta para uma junção implícita (vírgula no FROM mais condição no WHERE). As colunas são devidamente qualificadas (Curso.ID e Aluno.ID), eliminando ambiguidade. O resultado será a combinação das linhas onde o ID do curso coincide, trazendo Nome (do Aluno) e Especialidade e Tipo (do Curso).

Gabarito: letra E

Link permanente: /questoes/vu079935