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.