1
resposta

[Dúvida] Exercício 3 - Hora prática

Meu primeiro pensamento foi simplificar e colocar o "%" entre as duas letras para que o código fique menor. Aparentemente funcionou.

SELECT * FROM funcionarios WHERE nome LIKE 'A%s';

ou (resposta do gabarito)

SELECT * FROM funcionarios WHERE nome LIKE 'A%' AND nome LIKE '%s';

Foi sorte ou minha linha de raciocínio está certa?

1 resposta

Olá, Andre. Como vai?

Essa é uma excelente dúvida! Na verdade, não foi apenas sorte; existe uma diferença lógica sutil entre as duas formas, mas a sua linha de raciocínio está correta dentro de um contexto específico.

Vamos analisar o que cada comando faz no banco de dados:

  • Sua solução (LIKE 'A%s'): Esse comando busca nomes que começam obrigatoriamente com a letra "A" e terminam obrigatoriamente com a letra "s". O símbolo % no meio indica que pode haver qualquer quantidade de caracteres entre o início e o fim. Se todos os funcionários que você precisava filtrar começavam com A e terminavam com S, o resultado será idêntico ao do gabarito.
  • Solução do gabarito (LIKE 'A%' AND LIKE '%s'): Esta forma é mais "robusta". Ela verifica duas condições separadas: se o nome começa com A e se o nome termina com s.

Qual a diferença real?

A principal diferença aparece quando temos nomes muito curtos. Por exemplo, o nome "As":

  • A sua lógica LIKE 'A%s' encontrará "As", pois ele começa com A e termina com s (com zero caracteres entre eles).
  • A lógica do gabarito também encontrará "As".

A sua abordagem é, na verdade, uma forma mais performática e elegante de escrever a mesma consulta, pois você utiliza apenas um filtro em vez de dois conectados por um AND. Na prática do dia a dia, desenvolvedores costumam usar a sua forma A%s justamente por ser mais direta.

Dica de ouro: Case Sensitivity

No SQLite, o comando LIKE geralmente não diferencia maiúsculas de minúsculas (case-insensitive) para caracteres ASCII. No entanto, é sempre uma boa prática conferir se o seu banco de dados está configurado dessa forma, para garantir que "André" e "andré" sejam tratados corretamente.

Seu raciocínio demonstra que você está entendendo como os wildcards (curingas) funcionam no SQL. Continue simplificando seus códigos sempre que a lógica permitir!

Espero que possa ter lhe ajudado!