Questão de Banco de Dados — SQL — FUNDATEC 2023
- Código
- qq890100
- Banca
- FUNDATEC
- Órgão
- BRDE
- Ano
- 2023
- Nível
- Superior
- Cargo
- Analista de Sistemas - Administração de Banco de Dados
- AApenas I.
- BApenas II.
- CApenas III.
- DApenas II e III.
- EI, II e III.
GabaritoC — Apenas III.
Gabarito: letra C (Apenas III). A assertiva III está correta: para subconsultas NOT EXISTS, o desaninhamento utiliza anti-join, conforme documentado na literatura. As assertivas I e II apresentam imprecisões conceituais.
O desaninhamento (unnesting) é uma técnica de otimização que converte subconsultas aninhadas em operações de junção, permitindo que o otimizador explore mais planos de execução. As transformações variam conforme o operador da subconsulta.
A afirmação de que o desaninhamento converte uma subconsulta com processamento relacionado (correlacionada) em uma equivalente com processamento não relacionado é imprecisa. O desaninhamento pode ser aplicado tanto a subconsultas correlacionadas quanto a não correlacionadas; ele simplesmente reescreve a consulta em um único bloco com junção. Nem sempre há conversão de correlacionada para não correlacionada – por exemplo, subconsultas não correlacionadas já são independentes. Além disso, em alguns casos (como ALL), a consulta desaninhada ainda pode conter correlação implícita.
No caso de uma subconsulta ALL, o desaninhamento não explora semi-join. O semi-join é utilizado para subconsultas com IN ou EXISTS (equivalente a =ANY). Para o operador ALL, a transformação típica é via NOT EXISTS ou MINUS, não semi-join. O trecho do contexto confirma:
Elmasri & Navathe – Sistemas de Banco de Dados:
“desaninhar a subconsulta usando a semijunção” – referindo-se a IN, não a ALL.
Para subconsultas NOT EXISTS (e também NOT IN), o desaninhamento emprega a operação de anti-join. O contexto é explícito:
“Mostramos outro exemplo na Seção 18.1 usando o conector “NOT IN”, que foi convertido em uma única consulta de bloco por meio da operação antijunção.”
Como NOT EXISTS possui comportamento equivalente a NOT IN (com ressalvas de nulidade), o mesmo princípio se aplica. Portanto, a assertiva está correta.
Conclusão: Apenas a assertiva III está correta. Logo, o gabarito é a letra C.
Link permanente: /questoes/qq890100