Verkeerd aantal rijen bij gebruik van join en left outer join

Onder Invantive SQL 24.0.15 met Query Tool krijg ik verkeerde uitkomsten.

Juist: 4 rijen, overal itm.id not null, ook artikelen uit groep != ‘VK’

select itm.itemgroupcode
,      itm.id
from   sor@inmemorystorage sor
join   SalesOrderLinesV2Incremental sle
on     sle.orderid  = sor.sor_orderid
join   itm@inmemorystorage itm
on     itm.id       = sle.item
left
outer
join   exactonlinerest..purchaseorders por
on     por.purchaseorderid = sle.purchaseorder
--and    itm.itemgroupcode   != 'VK'
where sor_OrderNumber=20023437

Juist: 4 rijen, itm.id overal not null, ook artikelen uit groep != ‘VK’

select itm.itemgroupcode
,      itm.id
from   sor@inmemorystorage sor
join   SalesOrderLinesV2Incremental sle
on     sle.orderid  = sor.sor_orderid
join   ( select * from itm@inmemorystorage ) itm
on     itm.id       = sle.item
left
outer
join   exactonlinerest..purchaseorders por
on     por.purchaseorderid = sle.purchaseorder
and    itm.itemgroupcode   != 'VK'
where sor_OrderNumber=20023437

Verkeerd: 2 rijen, itm.id overal gevuld, alleen artikelen uit groep != ‘VK’

select itm.itemgroupcode
,      itm.id
from   sor@inmemorystorage sor
join   SalesOrderLinesV2Incremental sle
on     sle.orderid  = sor.sor_orderid
join   itm@inmemorystorage itm
on     itm.id       = sle.item
left
outer
join   exactonlinerest..purchaseorders por
on     por.purchaseorderid = sle.purchaseorder
and    itm.itemgroupcode   != 'VK'
where sor_OrderNumber=20023437

Verwacht is dat het toevoegen van itm.itemgroupcode in de left outer join op por geen invloed heeft op het aantal rijen uit itm@inmemorystorage.

Het probleem kon gereproduceerd worden onder deze omstandigheden:

create or replace table sor@InMemoryStorage
as
select 1 ItemCode
,      1 OrderId

create or replace table sle@InMemoryStorage
as
select 1 ItemCode
,      1 OrderId
,      'A' PurchaseOrderId
union all
select 2 ItemCode
,      1 OrderId
,      'A' PurchaseOrderId

create or replace table itm@inmemorystorage
as
select 1 ItemCode
,      'LT' ItemGroupCode
union all
select 2 ItemCode
,      'VK' ItemGroupCode

select itm.ItemCode
,      itm.ItemGroupCode
from   SOR@InMemoryStorage sor
join   SLE@InMemoryStorage sle
on     sle.OrderId = sor.OrderId
join   ITM@InMemoryStorage itm
on     itm.itemcode = sle.itemcode
left
outer
join   dual@datadictionary dal
on     dal.dummy_string = sle.PurchaseOrderId
and    itm.itemgroupcode != 'VK'
where  sor.OrderId = 1

De where-clause moet aanwezig zijn. Dit betreft een specifieke bug op left outer join. Er zal bekeken worden hoe deze opgelost kan worden.

Het gebruik van de volgende query moet een identiek resultaat opleveren als de voorgaand laatste query, maar doet dan niet:

select itm.ItemCode
,      itm.ItemGroupCode
from   SOR@InMemoryStorage sor
join   SLE@InMemoryStorage sle
on     sle.OrderId = sor.OrderId
join   ITM@InMemoryStorage itm
on     itm.itemcode = sle.itemcode
where  sor.OrderId = 1

Deze bug is nog aanwezig in release 24.0.180.