У меня есть 2 запроса Informix, которые, по моему мнению, должны возвращать те же данные, но не возвращают. Первый запрос использует подзапрос в качестве фильтра и неправильно возвращает никаких строк. Вторая выполняется с использованием проверки левого внешнего соединения на нулевое значение в том же столбце, который использовался в подзапросе, и она правильно возвращает правильный набор данных. Я что-то упустил или это ошибка?
select i.invoice_date, oe.commit_no
from oe
join invoice i
on oe.invoice_no = i.invoice_no
where i.invoice_date > today - 60
and oe.commit_no not in (select commit_no from bolx)
select i.invoice_date, oe.commit_no, bolx.bol_no
from oe
join invoice i
on oe.invoice_no = i.invoice_no
left join bolx
on bolx.commit_no = oe.commit_no
where i.invoice_date > today - 60
and bolx.commit_no is null
Сокращенные схемы (это устаревшая БД, поэтому у нее есть некоторые причуды):
invoice
invoice_no char(9),
invoice_date date
oe
commit_no decimal(8, 0),
invoice_no char(9)
bolx
commit_no decimal(8, 0)