AND NOT EXISTS (select ...)
est utilisé pour s'assurer que la sous-requête ne renvoie aucune ligne. Cela n'a généralement de sens que si la sous-requête est corrélée (c'est-à-dire si elle fait référence à des valeurs de la requête externe), car sinon elle sera soit vraie pour chaque ligne de résultat (et n'affectera pas réellement la requête), soit fausse pour chaque ligne de résultat (et fera en sorte que la requête ne renvoie aucun résultat, comme dans votre cas). Je pense ce que vous voulez c'est :
AND members.member_ID NOT IN (select shares.member_ID from shares where shares.asset_ID = '224')