Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — VUNESP 2024

Banco de DadosConsultas e Comandos em SQL
Código
vu212081
Banca
VUNESP
Órgão
Pref Piracicaba
Ano
2024
Cargo
Adm ( )

Considere as seguintes duas tabelas de banco de dados relacional, sendo que uma disciplina pode ter vários alunos, mas cada aluno está inscrito em apenas uma disciplina:

 

Disciplina (Código, Descrição)

Aluno (ID, Nome, Código)

 

O comando SQL para obter o Nome dos alunos inscritos nas disciplinas cujo código se inicie com a sequência “MN” é:

  1. ASELECT Código, Nome FROM Disciplina D, Aluno A WHERE Nome LIKE “MN%”;
  2. BSELECT Código, Nome FROM Disciplina D, Aluno A WHERE D.Código = A.Código AND Nome INSIDE “MN%”;
  3. CSELECT Código, Nome FROM Disciplina D, Aluno A WHERE Código = Código AND Nome = “MN%”;
  4. DSELECT Código, Nome FROM Disciplina D, Aluno A WHERE D.Código (A.Código) AND Nome LIKE “MN%”;
  5. ESELECT Código, Nome FROM Disciplina D, Aluno A WHERE D.Código = A.Código AND Nome LIKE “MN%”;
Revelar gabarito e comentário

GabaritoE — SELECT Código, Nome FROM Disciplina D, Aluno A WHERE D.Código = A.Código AND Nome LIKE “MN%”;

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

SQL: junção de tabelas e operador LIKE

Gabarito: letra E. O comando correto precisa de duas coisas: (1) a condição de junção entre as tabelas Disciplina e Aluno pela coluna Código (D.Código = A.Código), e (2) o filtro com o operador LIKE para selecionar os códigos que começam com "MN" (Nome LIKE 'MN%'). A alternativa E é a única que combina esses dois elementos corretamente.

Para entender por que essa é a resposta, é preciso dominar dois conceitos fundamentais de SQL: a junção de tabelas e o operador de padrão LIKE. Quando uma consulta envolve mais de uma tabela na cláusula FROM, o banco de dados primeiro combina as linhas das tabelas (produto cartesiano) e depois aplica o filtro da cláusula WHERE. Sem a condição de junção, cada aluno seria combinado com todas as disciplinas, gerando resultados incorretos. A condição D.Código = A.Código garante que apenas os pares de registros que possuem o mesmo código sejam considerados — é isso que conecta cada aluno à sua disciplina.

O operador LIKE é usado para buscar padrões em strings. O caractere % é um curinga que representa qualquer sequência de caracteres (inclusive nenhum). Assim, LIKE 'MN%' significa: o valor da coluna deve começar com "MN", seguido de qualquer coisa. É exatamente o que o enunciado pede: disciplinas cujo código se inicie com a sequência "MN".

A banca explora aqui dois erros clássicos: a ausência da condição de junção (gerando produto cartesiano) e o uso de operadores/sintaxes que não existem em SQL (como INSIDE, (A.Código) ou Código = Código). A alternativa E é a única que acerta os dois pontos.

Guarde a fórmula: junção correta + filtro com LIKE — é exatamente nesses dois critérios que as alternativas se dividem.

1Junção (D.Código = A.Código)
Evita produto cartesiano
Conecta aluno à disciplina
2Filtro LIKE 'MN%'
% = qualquer sequência
Código começa com "MN"
3Erros clássicos
Sem junção → produto cartesiano
Operadores inexistentes (INSIDE, =)
Coluna ambígua (Código = Código)
Consulta SQL com 2 tabelas
LEVELsoulevel.com.br
Consulta SQL com 2 tabelas: Junção (D.Código = A.Código) (Evita produto cartesiano, Conecta aluno à disciplina); Filtro LIKE 'MN%' (% = qualquer sequência, Código começa com "MN"); Erros clássicos (Sem junção → produto cartesiano, Operadores inexistentes (INSIDE, =), Coluna ambígua (Código = Código))

Alternativa A — ❌ Incorreta

Falta a condição de junção entre as tabelas. O comando FROM Disciplina D, Aluno A sem WHERE D.Código = A.Código gera um produto cartesiano, combinando cada aluno com todas as disciplinas, o que produz resultados incorretos. Além disso, o filtro Nome LIKE 'MN%' está aplicado sobre a coluna Nome da tabela Aluno, mas o enunciado pede o filtro sobre o código da disciplina.

Alternativa B — ❌ Incorreta

A condição de junção D.Código = A.Código está correta, mas o operador INSIDE não existe em SQL. O operador correto para busca de padrões é o LIKE. Além disso, o filtro Nome INSIDE 'MN%' está aplicado sobre a coluna Nome, quando deveria ser sobre o código da disciplina.

Alternativa C — ❌ Incorreta

A condição Código = Código é ambígua — o banco não sabe a qual tabela cada Código pertence, pois ambas as tabelas possuem essa coluna. O correto seria qualificar com o alias: D.Código = A.Código. Além disso, o operador = não serve para busca de padrões; ele compara valores exatos, e 'MN%' não é um valor literal, mas um padrão que exige o LIKE.

Alternativa D — ❌ Incorreta

A sintaxe D.Código (A.Código) não é válida em SQL. Não existe essa forma de expressar uma junção. O correto é usar o operador de igualdade = entre as colunas qualificadas. O filtro Nome LIKE 'MN%' também está aplicado sobre a coluna errada.

Alternativa E — ✅ Correta ⟵ GABARITO

Esta é a única alternativa que combina corretamente os dois elementos necessários: a condição de junção D.Código = A.Código (que conecta cada aluno à sua disciplina) e o filtro Nome LIKE 'MN%' (que seleciona apenas os códigos que começam com "MN"). A sintaxe está correta e atende exatamente ao que o enunciado pede.

NÃO CAIA NESSA!

A banca adora trocar o operador LIKE por outros que não existem (INSIDE, =) e esquecer a condição de junção, gerando produto cartesiano. Fique atento: para buscar padrões, o operador é sempre LIKE com % como curinga, e para juntar tabelas, a condição deve qualificar as colunas com os aliases (D.Código = A.Código).

Gabarito: letra E

Link permanente: /questoes/vu212081