Questa domanda:
select sum(amount)
from aaa
where id not in (select id from bbb);
Viene interpretato come:
select sum(aaa.amount)
from aaa
where aaa.id not in (select aaa.id from bbb);
perché bbb.id
non esiste. Quando si scrive SQL, suggerisco di utilizzare sempre gli alias di tabella. La query che pensavi di scrivere:
select sum(aaa.amount)
from aaa
where aaa.id not in (select bbb.id from bbb);
genererebbe l'errore che ti aspetti.