Considere a seguinte situação hipotética:
Uma universidade utiliza um sistema acadêmico para gerenciar informações de estudantes, dados cadastrais de pessoas e emissão de cartões institucionais. Um analista de dados precisa identificar estudantes ativos que ainda não possuem cartão institucional emitido.
Para isso, foi utilizada a seguinte consulta SQL em um banco de dados MySQL:
SELECT e.registro_academico, p.nome_completo, e.data_ingresso
FROM estudantes e
INNER JOIN pessoas p
ON e.id_pessoa = p.id_pessoa
LEFT JOIN cartoes_acesso ca
ON e.id_pessoa = ca.id_pessoa
WHERE ca.id_cartao IS NULL
AND e.ind_exclusao = 0;
Fonte: dados do elaborador
Considere ainda que o analista avalia o seguinte plano de execução simplificado obtido por meio do comando EXPLAIN:
| table | type | possible_keys | key | rows |
|---|---|---|---|---|
| e | ALL | idx_estudante_pessoa | NULL | 12000 |
| p | eq_ref | PRIMARY | PRIMARY | 1 |
| ca | ref | idx_cartao_pessoa | idx_cartao_pessoa | 3 |
Com base na consulta apresentada, na semântica das operações de junção e em aspectos de otimização de consultas SQL, analise as afirmações a seguir.
I. A consulta apresentada pode ser reescrita de forma logicamente equivalente, utilizando uma subconsulta com NOT EXISTS para identificar estudantes que não possuem registros correspondentes na tabela cartoes_acesso.
II. No plano de execução apresentado, o tipo ALL, na tabela estudantes, indica que o otimizador está realizando uma varredura completa da tabela, o que pode ocorrer quando não há índice adequado para a condição de busca utilizada.
III. Caso a condição ca.id_cartao IS NULL fosse movida da cláusula WHERE para a cláusula 0N do LEFT JOIN, o resultado da consulta permaneceria o mesmo.
IV. A consulta utiliza um padrão conhecido como anti-join, frequentemente empregado para localizar, em uma tabela, registros que não possuem correspondência em outra tabela.
Assinale a alternativa CORRETA.