AND NOT EXISTS (select ...)
wird verwendet, um sicherzustellen, dass die Unterabfrage keine Zeilen zurückgibt. Es macht normalerweise nur Sinn, wenn die Unterabfrage korreliert ist (d. h. wenn sie sich auf Werte aus der äußeren Abfrage bezieht), da sie sonst entweder für jede Ergebniszeile wahr ist (und die Abfrage nicht wirklich beeinflusst) oder für falsch ist jede Ergebniszeile (und führt dazu, dass die Abfrage überhaupt keine Ergebnisse zurückgibt, wie in Ihrem Fall). Ich denke Was Sie wollen, ist:
AND members.member_ID NOT IN (select shares.member_ID from shares where shares.asset_ID = '224')