Considere o modelo de um banco de dados do tipo SQL a seguir, para responder a 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.
ASELECT post.tituloFROM usuárioInner Join post on usuario.id = post.usuario_idWHERE nome like ‘%Joao’
BSELECT post.tituloFROM usuárioInner Join post on usuario.id = post.usuario_idWHERE nome like ‘Joao%’
CSELECT post.tituloFROM usuárioWHERE usuário like ‘Joao%’
DSELECT post.tituloFROM usuárioWHERE nome like ‘%Joao%’
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 💪