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
Dari jumlah data sampel yang terbatas, tampaknya Anda dapat menentukan kecocokan secara unik dengan memiliki module umum , user dan batch . Saya tidak yakin mengapa Anda membuat duplikat dalam kueri Anda. Satu-satunya masalah lain tampaknya menggunakan gabungan luar untuk menjaga "pengiriman" yang belum memiliki "terima".
Saya pikir Anda masih menginginkan semuanya dalam hasil. Jika Anda hanya menginginkan skenario yang tidak berpasangan, tambahkan:
where r.Module is null