Consultas SQL: operador ILIKE e correspondência de padrões
Gabarito: letra B. Para consultar apenas os processos que possuem o termo "trabalhista" no campo descricao, a condição correta é descricao ilike 'trabalhista'. O operador ILIKE realiza uma comparação de padrão insensível a maiúsculas e minúsculas (case-insensitive), o que é essencial porque o valor armazenado é 'Trabalhista' (com 'T' maiúsculo) e o termo buscado é 'trabalhista' (com 't' minúsculo). As demais alternativas ou usam operadores inadequados para busca de padrão ou possuem sintaxe incorreta.
A questão testa o conhecimento sobre os operadores de comparação e correspondência de padrões na linguagem SQL. O comando SELECT é usado para consultar dados, e a cláusula WHERE filtra os registros que atendem a uma condição específica. Para buscar um termo dentro de um campo de texto, existem diferentes abordagens, e a escolha correta depende do comportamento desejado em relação a maiúsculas/minúsculas e à posição do termo.
O operador LIKE é o mais comum para correspondência de padrões em SQL. Ele utiliza os curingas % (qualquer sequência de caracteres) e _ (um único caractere). Por exemplo, WHERE descricao LIKE '%trabalhista%' encontraria qualquer descrição que contenha a palavra "trabalhista" em qualquer posição. No entanto, o LIKE é sensível a maiúsculas e minúsculas em muitos SGBDs (como PostgreSQL, por padrão). Isso significa que LIKE 'trabalhista' não encontraria 'Trabalhista'.
Para contornar essa limitação, o PostgreSQL oferece o operador ILIKE, que é a versão insensível a maiúsculas e minúsculas do LIKE. Com ILIKE, a comparação descricao ILIKE 'trabalhista' encontraria tanto 'Trabalhista' quanto 'trabalhista', 'TRABALHISTA', etc. Como o valor armazenado é 'Trabalhista' e o termo buscado é 'trabalhista', o ILIKE é a escolha correta para garantir que a consulta retorne o registro esperado, independentemente da capitalização.
Outra alternativa seria usar LOWER(descricao) = 'trabalhista', que converte o campo para minúsculas antes de comparar. No entanto, essa não é uma das opções apresentadas. A questão, portanto, foca no conhecimento específico do operador ILIKE e na diferença entre ele e o LIKE.
A pegadinha da questão está na capitalização: o valor armazenado é 'Trabalhista' (com 'T' maiúsculo), enquanto o termo buscado é 'trabalhista' (com 't' minúsculo). Se o candidato escolhesse a alternativa A (descricao = 'trabalhista'), a consulta não retornaria nenhum registro, pois a comparação exata é sensível a maiúsculas e minúsculas. A alternativa B resolve esse problema usando ILIKE, que ignora a diferença entre maiúsculas e minúsculas.
Alternativa A — ❌ Incorreta
A condição descricao = 'trabalhista' usa o operador de igualdade, que é sensível a maiúsculas e minúsculas na maioria dos SGBDs. Como o valor armazenado é 'Trabalhista' (com 'T' maiúsculo), a comparação com 'trabalhista' (com 't' minúsculo) falharia e nenhum registro seria retornado. Para uma busca exata, seria necessário usar descricao = 'Trabalhista', mas isso não atenderia ao requisito de buscar o termo "trabalhista" de forma genérica.
Alternativa B — ✅ Correta ⟵ GABARITO
A condição descricao ilike 'trabalhista' usa o operador ILIKE, que é a versão insensível a maiúsculas e minúsculas do LIKE. Isso significa que a comparação encontraria 'Trabalhista', 'trabalhista', 'TRABALHISTA', etc. Como o valor armazenado é 'Trabalhista' e o termo buscado é 'trabalhista', o ILIKE garante que o registro seja retornado, independentemente da capitalização. É a alternativa que atende corretamente ao requisito da questão.
Alternativa C — ❌ Incorreta
A condição '_trabalhista_' != descricao usa o operador de diferença (!=) e os curingas _ (que representam um único caractere). Essa condição retornaria todos os registros cuja descrição não seja exatamente uma string com um caractere antes e um depois de "trabalhista" (como 'X trabalhista Y'). Isso não atende ao requisito de buscar apenas os processos que possuem o termo "trabalhista". Além disso, a sintaxe é confusa e não usa o operador de correspondência de padrão adequado (LIKE ou ILIKE).
Alternativa D — ❌ Incorreta
A condição '%trabalhista%' IN descricao está com a sintaxe invertida. O operador IN é usado para verificar se um valor está em uma lista de valores, como descricao IN ('a', 'b', 'c'). A sintaxe correta para usar curingas seria descricao LIKE '%trabalhista%'. A forma apresentada na alternativa é inválida e geraria um erro de sintaxe no SGBD.
Alternativa E — ❌ Incorreta
A função POSITION('trabalhista' IN descricao) retorna a posição da primeira ocorrência do termo "trabalhista" na string descricao. Se o termo não for encontrado, retorna 0. No entanto, essa função não é uma condição booleana que possa ser usada diretamente na cláusula WHERE. Para usá-la como condição, seria necessário comparar o resultado com algo, como POSITION('trabalhista' IN descricao) > 0. A forma apresentada na alternativa não é uma condição válida e não filtraria os registros corretamente.
Gabarito: letra B