Cette requête :
select sum(amount)
from aaa
where id not in (select id from bbb);
Est interprété comme :
select sum(aaa.amount)
from aaa
where aaa.id not in (select aaa.id from bbb);
car bbb.id
n'existe pas. Lors de l'écriture de SQL, je vous suggère de toujours utiliser des alias de table. La requête que vous pensiez écrire :
select sum(aaa.amount)
from aaa
where aaa.id not in (select bbb.id from bbb);
générerait l'erreur attendue.