AND NOT EXISTS (select ...)
służy do upewnienia się, że podzapytanie nie zwróci żadnych wierszy. Zwykle ma to sens tylko wtedy, gdy podzapytanie jest skorelowane (tj. jeśli odnosi się do wartości z zapytania zewnętrznego), ponieważ w przeciwnym razie będzie albo prawdziwe dla każdego wiersza wyników (i nie wpłynie na zapytanie), albo będzie fałszywe dla każdy wiersz wyników (i spowoduje, że zapytanie nie zwróci żadnych wyników, jak w twoim przypadku). myślę czego chcesz to:
AND members.member_ID NOT IN (select shares.member_ID from shares where shares.asset_ID = '224')