Pular para o conteúdo principal

Questão de Banco de Dados — SQL — VUNESP 2025

Banco de DadosSQL
Código
vu098725
Banca
VUNESP
Órgão
Prefeitura de Itatiba - SP
Ano
2025
Nível
Médio
Cargo
Instrutor de Informática

Considere o modelo de um banco de dados do tipo SQL a seguir, para responder a questão:


Imagem da questão

(Arquivo pessoal; imagem usada com autorizaçã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.
  1. ASELECT post.tituloFROM usuárioInner Join post on usuario.id = post.usuario_idWHERE nome like ‘%Joao’
  2. BSELECT post.tituloFROM usuárioInner Join post on usuario.id = post.usuario_idWHERE nome like ‘Joao%’
  3. CSELECT post.tituloFROM usuárioWHERE usuário like ‘Joao%’
  4. DSELECT post.tituloFROM usuárioWHERE nome like ‘%Joao%’
  5. ESELECT post.tituloFROM usuárioWHERE 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”.

Operador LIKE no SQL: padrões de busca com curingas

Gabarito: letra B. Para retornar os títulos dos posts de usuários cujos nomes iniciam com "Joao", o padrão correto no operador LIKE é 'Joao%' — o curinga % após o texto indica que o nome deve começar com "Joao" e pode ter qualquer sequência de caracteres depois. A alternativa B é a única que combina o JOIN correto entre as tabelas usuario e post com o padrão LIKE adequado.

O operador LIKE é usado no SQL para buscar padrões em colunas de texto. Ele trabalha com dois curingas principais: o % (porcentagem), que representa zero ou mais caracteres, e o _ (sublinhado), que representa exatamente um caractere. A posição desses curingas em relação ao texto define o que será buscado:

  • 'Joao%' → nomes que começam com "Joao" (o % no final permite qualquer continuação).

  • '%Joao' → nomes que terminam com "Joao" (o % no início permite qualquer prefixo).

  • '%Joao%' → nomes que contêm "Joao" em qualquer posição.

A questão pede nomes que se iniciam com "Joao", portanto o padrão correto é 'Joao%'. Além disso, a consulta precisa relacionar as tabelas usuario e post para obter os títulos dos posts de cada usuário. Isso é feito com um INNER JOIN na chave estrangeira usuario_id da tabela post, que referencia a chave primária id da tabela usuario. Sem o JOIN, não há como associar cada post ao seu autor.

A pegadinha clássica desta questão é a posição do curinga %. Muitos candidatos confundem '%Joao' (termina com) com 'Joao%' (começa com), ou usam '%Joao%' (contém) quando o enunciado pede especificamente o início. A banca explora exatamente essa confusão entre os três padrões possíveis.

Guarde a regra de ouro: o % antes do texto = termina com; o % depois do texto = começa com; % dos dois lados = contém. É nessa distinção que as alternativas se separam.

Critério

A ('%Joao')

B ('Joao%') ✅

C (usuário like)

D ('%Joao%')

E ('Joao%')

Padrão LIKE

Termina com "Joao"

Começa com "Joao"

Começa com "Joao"

Contém "Joao"

Começa com "Joao"

JOIN com post

✅ Correto

✅ Correto

❌ Ausente

✅ Correto

❌ Ausente

Coluna no WHERE

nome

nome

usuário (tabela)

nome

nome

Atende ao enunciado

❌ Não

Sim

❌ Não (sem JOIN)

❌ Não (muito amplo)

❌ Não (sem JOIN)

Alternativa A — ❌ Incorreta

O padrão '%Joao' busca nomes que terminam com "Joao", não que começam. O % no início permite qualquer prefixo antes de "Joao", o que contraria o enunciado. O JOIN está correto, mas o padrão LIKE está invertido.

Alternativa B — ✅ Correta ⟵ GABARITO

O padrão 'Joao%' busca nomes que começam com "Joao", exatamente como pede o enunciado. O INNER JOIN entre usuario e post na condição usuario.id = post.usuario_id relaciona corretamente cada post ao seu autor, e a seleção de post.titulo retorna os títulos desejados.

Alternativa C — ❌ Incorreta

Faltou o JOIN com a tabela post. A consulta seleciona post.titulo mas o FROM referencia apenas a tabela usuario, sem qualquer relação com a tabela post. Além disso, a condição WHERE usuário like 'Joao%' usa o nome da tabela em vez da coluna nome, o que é um erro de sintaxe.

Alternativa D — ❌ Incorreta

O padrão '%Joao%' busca nomes que contêm "Joao" em qualquer posição, não apenas os que começam. Um nome como "Maria Joao" ou "Joao Pedro" seria retornado, mas o enunciado pede especificamente nomes que se iniciam com "Joao". O JOIN está correto, mas o padrão é mais abrangente que o necessário.

Alternativa E — ❌ Incorreta

Faltou o JOIN com a tabela post. A consulta seleciona post.titulo mas o FROM referencia apenas a tabela usuario, sem qualquer relação com a tabela post. O padrão LIKE está correto, mas a consulta não consegue acessar os títulos dos posts.

NÃO CAIA NESSA!

A banca troca a posição do curinga % para confundir. '%Joao' (termina com), 'Joao%' (começa com) e '%Joao%' (contém) são padrões diferentes, e o enunciado pede especificamente o início. Além disso, as alternativas C e E omitem o JOIN, tornando a consulta inválida. Com treino, você identifica essas trocas de longe 💪

Gabarito: letra B

Link permanente: /questoes/vu098725