Ошибка известная с давних времен.
Если в запросе использовать notexists join, то последующие exists & notexists не работают.
Небольшой пример на AX2009RU8:
X++:
static void JobNotExists(Args _args)
{
InventTable inventTable;
InventTable inventTableE;
InventTable inventTableNE;
ItemId itemId = '1001', itemIdne = '1001notFound';
;
// Убедимся, что такая запись есть
select itemId from inventTable
where inventTable.ItemId == itemId;
info(inventTable.ItemId);
// Убедимся, что такая ItemId есть, а ItemIdne нет
select itemId from inventTable
where inventTable.ItemId == itemId
notexists join inventTableNE
where inventTableNE.ItemId == itemIdne;
info(inventTable.ItemId);
// Здесь exists возвращает false, но на результате это не сказывается
select itemId from inventTable
where inventTable.ItemId == itemId
notexists join inventTableNE
where inventTableNE.ItemId == itemIdne
exists join inventTableE
where inventTableE.ItemId == itemIdne;
error(inventTable.ItemId);
// Здесь второй notexists возвращает false, но на результате это не сказывается
select itemId from inventTable
where inventTable.ItemId == itemId
notexists join inventTableE
where inventTableE.ItemId == itemIdne
notexists join inventTableNE
where inventTableNE.ItemId == inventTable.ItemId;
error(inventTable.ItemId);
}
Почему вспомнил?
Встретил в HRP несколько примеров такого кода с макросом
TransLinkNotExistsReversed_RU
P.S. Сейчас не могу проверить, но помнится на Oracle это не воспроизводится