Pular para o conteúdo principal

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

Banco de DadosConsultas e Comandos em SQL
Código
vu222891
Banca
VUNESP
Órgão
Pref Itatiba
Ano
2025
Cargo
IInf ( )
Considere o modelo de um banco de dados do tipo SQL a seguir, para responder à questão. Assinale a alternativa que apresenta o comando SQL, no padrão SQL ANSI, que retornará todos os títulos dos posts dos usuários cujos nomes se iniciam com Joao.Imagem associada para resolução da questão
  1. ASELECT post.titulo FROM usuário Inner Join post on usuario.id = post.usuario_id WHERE nome like ‘%Joao’
  2. BSELECT post.titulo FROM usuário Inner Join post on usuario.id = post.usuario_id WHERE nome like ‘Joao%’
  3. CSELECT post.titulo FROM usuário WHERE usuário like ‘Joao%’
  4. DSELECT post.titulo FROM usuário WHERE nome like ‘%Joao%’
  5. ESELECT post.titulo FROM usuário WHERE nome like ‘Joao%’
Revelar gabarito e comentário

GabaritoB — SELECT post.titulo FROM usuário Inner Join post on usuario.id = post.usuario_id WHERE nome like ‘Joao%’

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: operador LIKE e junção de tabelas

Gabarito: letra B. O comando correto usa LIKE 'Joao%' para capturar nomes que começam com "Joao" (o curinga % no final), e faz a junção entre as tabelas usuario e post pela chave estrangeira usuario_id — exatamente o que a alternativa B apresenta. As demais alternativas erram ou na posição do curinga, ou na ausência da junção, ou na coluna filtrada.

O operador LIKE é o recurso do SQL para busca por padrão em strings, usando dois curingas: % (qualquer sequência de caracteres, inclusive vazia) e _ (um único caractere). A posição do % define o que se está procurando: 'Joao%' casa com strings que começam com "Joao" (ex.: "Joao Silva", "Joao Pedro"); '%Joao' casa com strings que terminam com "Joao" (ex.: "Maria Joao"); e '%Joao%' casa com strings que contêm "Joao" em qualquer posição (ex.: "Antonio Joao Carlos").

No modelo relacional, para retornar dados de duas tabelas relacionadas (aqui, usuario e post), é obrigatório usar uma junçãoINNER JOIN — especificando a condição de igualdade entre a chave primária de uma e a chave estrangeira da outra. No caso, usuario.id = post.usuario_id conecta cada post ao seu autor. Sem essa junção, não há como cruzar os dados das duas tabelas, e a consulta fica incompleta ou incorreta.

A pegadinha central desta questão é a posição do curinga % em relação ao termo "Joao". O enunciado pede nomes que se iniciam com "Joao" — ou seja, o padrão deve começar com "Joao" e permitir qualquer continuação. Isso exige o % depois de "Joao" ('Joao%'), nunca antes. Colocar o % antes ('%Joao') inverteria o sentido, retornando nomes que terminam com "Joao".

Outra armadilha é a ausência da junção em algumas alternativas: sem o INNER JOIN, não é possível relacionar os posts aos seus autores, tornando a consulta inválida para o que se pede. E há ainda a alternativa que filtra a coluna errada (WHERE usuário LIKE), o que não faz sentido, pois a condição deve recair sobre a coluna nome da tabela usuario.

Guarde a regra de ouro: o curinga % fica do lado onde a string pode continuar. Para nomes que começam com um termo, o % vai no final; para nomes que terminam, o % vai no início; para nomes que contêm, o % vai dos dois lados. E, em consultas com múltiplas tabelas, a junção é sempre necessária.

Alternativa A — ❌ Incorreta

O erro está no padrão '%Joao': o curinga % antes de "Joao" faz a busca retornar nomes que terminam com "Joao", não os que se iniciam. O enunciado pede nomes que começam com "Joao", o que exige o % depois do termo ('Joao%'). A junção está correta, mas o filtro está invertido.

Alternativa B — ✅ Correta ⟵ GABARITO

Esta alternativa reúne todos os elementos corretos: faz a junção INNER JOIN entre usuario e post pela condição usuario.id = post.usuario_id, seleciona a coluna post.titulo e aplica o filtro WHERE nome LIKE 'Joao%', que retorna exatamente os nomes que se iniciam com "Joao". O % no final permite qualquer continuação, como "Joao Silva" ou "Joao Pedro".

Alternativa C — ❌ Incorreta

Faltou a junção entre as tabelas usuario e post — sem o INNER JOIN, não é possível relacionar os posts aos seus autores, e a consulta não retornaria os títulos corretamente. Além disso, o filtro está aplicado sobre a tabela usuário (WHERE usuário LIKE), quando deveria ser sobre a coluna nome da tabela usuario.

Alternativa D — ❌ Incorreta

O padrão '%Joao%' retorna nomes que contêm "Joao" em qualquer posição — no início, no meio ou no fim. O enunciado pede especificamente nomes que se iniciam com "Joao", o que exige o % apenas no final ('Joao%'). Além disso, a alternativa não faz a junção com a tabela post, tornando a consulta incapaz de retornar os títulos.

Alternativa E — ❌ Incorreta

Embora o filtro LIKE 'Joao%' esteja correto, a alternativa não faz a junção entre as tabelas usuario e post. Sem o INNER JOIN, a consulta não tem como relacionar cada post ao seu autor, e portanto não retornaria os títulos dos posts dos usuários filtrados.

PEGA ESSA DICA!

Para questões de LIKE, desenhe mentalmente a string: se o termo deve estar no início, o % fica depois; se no fim, o % fica antes; se em qualquer lugar, % dos dois lados. E, sempre que a consulta envolver duas tabelas, verifique se a junção está presente — é o erro mais comum em questões de SQL.

Gabarito: letra B

Link permanente: /questoes/vu222891