select *
from
(select * from T where Action = 'SENT') s
left outer join
(select * from T where Action = 'RECEIVED') r
on r.Module and s.Module and r.User = s.User and r.Batch = s.Batch
A partir de la cantidad limitada de datos de muestra, parece que solo puede determinar una coincidencia si tiene un module
común , user
y batch
. No estoy seguro de por qué se te ocurrieron duplicados en tus consultas. El único otro problema parece ser el uso de una combinación externa para mantener los "envíos" que aún no tienen una "recepción".
Creo que todavía querías todo en el resultado. Si solo deseaba los escenarios no emparejados, agregue:
where r.Module is null