Comando DELETE e a cláusula WHERE em SQL
Gabarito: letra E. O comando DELETE FROM tabela WHERE EMAIL = 'Sem'; exclui apenas os registros cujo campo EMAIL seja exatamente igual à string 'Sem'. Como a questão afirma que não há registros com esse valor, nenhum registro será excluído — a alternativa correta é a letra E.
O comando DELETE é um dos comandos da sublinguagem DML (Data Manipulation Language), responsável pela manipulação dos dados dentro das tabelas. Sua sintaxe básica é DELETE FROM nome_da_tabela WHERE condição;. A cláusula WHERE é o filtro que determina quais linhas serão removidas: apenas as linhas que satisfazem a condição especificada são excluídas. Se a condição não for atendida por nenhuma linha, o comando é executado com sucesso, mas não remove nenhum registro — não gera erro, apenas não faz nada.
No comando apresentado, a condição é EMAIL = 'Sem'. Isso significa que o banco de dados irá comparar o valor do campo EMAIL de cada registro com a string literal 'Sem'. A comparação é feita caractere por caractere, e apenas os registros cujo EMAIL seja exatamente igual a 'Sem' (considerando maiúsculas, minúsculas e acentuação, dependendo do SGBD) serão excluídos. Registros com EMAIL nulo, com outros valores como 'Sem email' ou 'SEM', ou qualquer outro valor diferente de 'Sem' não serão afetados.
É importante destacar que a comparação com NULL é um caso especial em SQL. NULL representa ausência de valor, e qualquer comparação com NULL (como EMAIL = NULL) resulta em um valor desconhecido (UNKNOWN), que não é verdadeiro nem falso. Por isso, para verificar se um campo é nulo, usa-se IS NULL, e não = NULL. No comando da questão, a condição EMAIL = 'Sem' não captura registros com EMAIL nulo, pois a comparação com uma string não é verdadeira para NULL.
A pegadinha desta questão está em associar a condição = 'Sem' com a possibilidade de excluir registros nulos ou com valores semelhantes. A banca explora a confusão entre o operador de igualdade e o tratamento de NULL, além da interpretação literal da string. O candidato que não domina a semântica do WHERE pode achar que o comando exclui registros com EMAIL nulo ou com qualquer valor que 'contenha' a palavra 'Sem', mas o operador = exige igualdade exata.
Guarde a distinção entre os operadores de comparação e o tratamento de NULL: = compara valores exatos, IS NULL verifica ausência de valor, e LIKE faz correspondência de padrão. É exatamente nessa fronteira que as alternativas se dividem.
Alternativa A — ❌ Incorreta
Afirma que serão excluídos os registros cujo campo EMAIL seja igual a 'Sem'. Apesar de a condição do comando ser exatamente essa, a questão informa que não há registros com esse valor. Portanto, embora a condição esteja correta, o resultado prático é que nenhum registro será excluído. A alternativa descreve a condição, mas não o resultado efetivo.
Alternativa B — ❌ Incorreta
Afirma que serão excluídos os registros com EMAIL nulo. Isso está errado porque a condição EMAIL = 'Sem' não captura valores nulos. Em SQL, NULL não é igual a nenhum valor, incluindo a string 'Sem'. Para excluir registros com EMAIL nulo, a condição deveria ser WHERE EMAIL IS NULL. A alternativa confunde o operador de igualdade com a verificação de nulidade.
Alternativa C — ❌ Incorreta
Afirma que serão excluídos os registros com EMAIL igual a 'Sem' ou nulo. Essa alternativa combina os erros das alternativas A e B. A condição EMAIL = 'Sem' não inclui registros nulos, pois a comparação com NULL não é verdadeira. Além disso, mesmo que houvesse registros com EMAIL 'Sem', eles seriam excluídos, mas os nulos não. A alternativa está incorreta por incluir a exclusão de registros nulos, que não ocorre.
Alternativa D — ❌ Incorreta
Afirma que todos os registros serão excluídos. Isso só ocorreria se o comando fosse DELETE FROM tabela; sem a cláusula WHERE, ou se a condição fosse sempre verdadeira. Como há uma condição específica (EMAIL = 'Sem'), apenas os registros que a satisfazem seriam excluídos. Como nenhum registro atende à condição, nenhum é excluído, muito menos todos.
Alternativa E — ✅ Correta ⟵ GABARITO
Afirma que nenhum registro será excluído. Isso está correto porque a condição EMAIL = 'Sem' não é atendida por nenhum registro da tabela, conforme informado no enunciado. O comando DELETE é executado com sucesso, mas como o filtro não seleciona nenhuma linha, nenhum registro é removido. A alternativa reflete corretamente o resultado da execução do comando.
Gabarito: letra E