Questão de Banco de Dados — Consultas e Comandos em SQL — VUNESP 2023
Banco de Dados›Consultas e Comandos em SQL
Código
vu195489
Banca
VUNESP
Órgão
Pref Pindamonhangaba
Ano
2023
Cargo
WDes (Pref Pinda)
Considere as seguintes tabelas de um banco de dados relacional: Disciplina (Código, Nome-D, ID) Curso (ID, Nome-C, Descrição) sendo que, na tabela Disciplina, ID é uma chave estrangeira, com origem na tabela Curso. O comando SQL para obter os nomes das disciplinas e o nome do curso a que a disciplina pertence é
ASELECT Nome-D, Nome-C FROM Disciplina D, Curso C;
BSELECT Nome-D, Nome-C FROM Disciplina D.ID, Curso C.ID;
CSELECT Nome-D, Nome-C WHERE Disciplina D.ID IN Curso C.ID;
DSELECT Nome-D, Nome-C FROM Disciplina D, Curso C AND Curso.ID = Disciplina.ID;
ESELECT Nome-D, Nome-C FROM Disciplina D, Curso C WHERE Curso.ID = Disciplina.ID;
Revelar gabarito e comentário▾
GabaritoE — SELECT Nome-D, Nome-C
FROM Disciplina D, Curso C
WHERE Curso.ID = Disciplina.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”.
Consultas SQL com junção de tabelas
Gabarito: letra E. Para obter os nomes das disciplinas e o nome do curso a que cada disciplina pertence, é necessário combinar as tabelas Disciplina e Curso por meio de uma junção (JOIN), relacionando a chave estrangeira Disciplina.ID com a chave primária Curso.ID. A alternativa E apresenta a sintaxe correta da junção implícita, com a cláusula WHERE especificando a condição de igualdade entre as chaves.
A linguagem SQL (Structured Query Language) é a linguagem padrão para acesso e manipulação de bancos de dados relacionais. Uma de suas principais características é ser declarativa, ou seja, o usuário especifica o que deseja obter, sem precisar informar como o banco deve executar a consulta. Para buscar dados de duas ou mais tabelas, utiliza-se a operação de junção (JOIN), que combina linhas de tabelas diferentes com base em uma condição de relacionamento.
No modelo relacional, o relacionamento entre tabelas é estabelecido por meio de chaves: a chave primária identifica unicamente cada registro em uma tabela, e a chave estrangeira é um atributo em uma tabela que referencia a chave primária de outra tabela. No enunciado, Disciplina.ID é uma chave estrangeira que referencia Curso.ID (chave primária da tabela Curso). Para obter o nome da disciplina e o nome do curso correspondente, é preciso juntar as duas tabelas pela condição Curso.ID = Disciplina.ID.
Existem duas formas principais de escrever uma junção em SQL:
Junção implícita (sintaxe antiga): lista as tabelas na cláusula FROM separadas por vírgula e especifica a condição de junção na cláusula WHERE.
Junção explícita (sintaxe ANSI): utiliza a cláusula JOIN ... ON para especificar a condição de junção.
Ambas as formas são equivalentes e produzem o mesmo resultado. A alternativa E utiliza a junção implícita, que é a sintaxe correta entre as opções apresentadas.
A pegadinha desta questão está na sintaxe da junção: a banca apresenta alternativas com erros de sintaxe (como FROM Disciplina D.ID, WHERE Disciplina D.ID IN Curso C.ID ou AND Curso.ID = Disciplina.ID sem a cláusula WHERE), tentando confundir o candidato que não domina a estrutura básica do comando SELECT. O candidato que conhece a sintaxe correta identifica rapidamente a alternativa E como a única válida.
Critério
Alternativa A
Alternativa B
Alternativa C
Alternativa D
Alternativa E (✅)
Cláusula FROM presente?
Sim
Não (usa colunas D.ID, C.ID como se fossem tabelas)
Combina cada disciplina com todos os cursos (incorreto)
Erro de execução
Erro de execução
Erro de execução
Nome da disciplina + nome do curso correspondente
Alternativa A — ❌ Incorreta
A consulta SELECT Nome-D, Nome-C FROM Disciplina D, Curso C; lista as duas tabelas na cláusula FROM, mas não especifica a condição de junção. Sem a cláusula WHERE (ou ON), o resultado seria o produto cartesiano das duas tabelas, ou seja, cada disciplina seria combinada com todos os cursos, gerando um resultado incorreto e com muitas linhas duplicadas.
Alternativa B — ❌ Incorreta
A consulta SELECT Nome-D, Nome-C FROM Disciplina D.ID, Curso C.ID; apresenta um erro de sintaxe grave: D.ID e C.ID são colunas, não tabelas. Na cláusula FROM, devem ser listados os nomes das tabelas (ou seus aliases), não colunas. A sintaxe correta seria FROM Disciplina D, Curso C.
Alternativa C — ❌ Incorreta
A consulta SELECT Nome-D, Nome-C WHERE Disciplina D.ID IN Curso C.ID; está incorreta por dois motivos: (1) falta a cláusula FROM, que é obrigatória para indicar de quais tabelas os dados serão obtidos; (2) a sintaxe Disciplina D.ID IN Curso C.ID é inválida — o operador IN é usado para comparar um valor com uma lista de valores, não para juntar tabelas. A condição de junção deve ser WHERE Curso.ID = Disciplina.ID.
Alternativa D — ❌ Incorreta
A consulta SELECT Nome-D, Nome-C FROM Disciplina D, Curso C AND Curso.ID = Disciplina.ID; apresenta um erro de sintaxe: a condição de junção AND Curso.ID = Disciplina.ID está fora da cláusula WHERE. A palavra-chave AND é usada para combinar condições dentro da cláusula WHERE, mas a condição de junção deve ser precedida por WHERE, não por AND. A sintaxe correta seria FROM Disciplina D, Curso C WHERE Curso.ID = Disciplina.ID.
Alternativa E — ✅ Correta ⟵ GABARITO
A consulta SELECT Nome-D, Nome-C FROM Disciplina D, Curso C WHERE Curso.ID = Disciplina.ID; está correta. Ela lista as duas tabelas na cláusula FROM (com aliases D e C) e especifica a condição de junção na cláusula WHERE, relacionando a chave estrangeira Disciplina.ID com a chave primária Curso.ID. Dessa forma, para cada disciplina, o banco encontra o curso correspondente e retorna o nome da disciplina e o nome do curso.
PEGA ESSA DICA!
Para questões de junção em SQL, verifique sempre se a consulta possui: (1) a cláusula FROM com as tabelas envolvidas; (2) a condição de junção na cláusula WHERE (junção implícita) ou na cláusula ON (junção explícita). Se faltar a condição de junção, o resultado será um produto cartesiano; se a condição estiver mal posicionada, haverá erro de sintaxe.