Untuk mendapatkan data yang Anda inginkan, saya sarankan menggunakan agregasi dengan having
klausa:
Select SP.SPRIDEN_ID, SP.SPRIDEN_LAST_NAME, SP.SPRIDEN_FIRST_NAME, SR.SHRDGMR_SEQ_NO,
SR.SHRDGMR_PROGRAM
from spriden SP join
SHRDGMR SR
on SP.SPRIDEN_PIDM = SR.SHRDGMR_PIDM join
SPRHOLD SH
on sp.spriden_pidm = sh.sprhold_pidm
where SR.SHRDGMR_DEGS_CODE = 'PN' and
SR.SHRDGMR_TERM_CODE_GRAD >= '201489' and
sp.spriden_change_ind is NULL
group by SP.SPRIDEN_ID, SP.SPRIDEN_LAST_NAME, SP.SPRIDEN_FIRST_NAME, SR.SHRDGMR_SEQ_NO,
SR.SHRDGMR_PROGRAM
having sum(case when sh.sprhold_hldd_code = 'RH' then 1 else 0 end) = 0;
Anda memiliki dua masalah dengan pendekatan Anda. Yang pertama adalah bahwa subquery mengembalikan true atau false dan memengaruhi semua baris dalam kueri asli. Anda benar-benar menginginkan subquery yang berkorelasi. Tetapi, bahkan jika Anda melakukannya dengan benar, Anda akan mengembalikan baris duplikat untuk Mary. Ini menyelesaikan kedua masalah tersebut.