И всё-таки поведение оптимизатора в этом случае некорректно.
Когда во вложенном запросе есть first или skip его нельзя преобразовывать в exists!
Для проверки нарисовал запросик:
select C.IDCLIENT
from CLIENTS C
where C.IDCLIENT in (
  select first 100 C.IDCLIENT
  from CLIENTS C
  order by C.IDCLIENT
)
И он вернул мне ВСЕ записи!
Кто-нибудь может объяснить почему?
Прочитал релизноты, чуть подумал, написал такой запрос:
select C0.IDCLIENT
from CLIENTS C0
where C0.IDCLIENT < (
  select first 1 skip 10 C.IDCLIENT
  from CLIENTS C
  order by C.IDCLIENT
)
Действительно выдаёт 10 первых.

Ответить