Esta consulta:
select sum(amount)
from aaa
where id not in (select id from bbb);
É interpretado como:
select sum(aaa.amount)
from aaa
where aaa.id not in (select aaa.id from bbb);
porque
bbb.id
não existe. Ao escrever SQL, sugiro que você sempre use aliases de tabela. A consulta que você pensou que estava escrevendo:select sum(aaa.amount)
from aaa
where aaa.id not in (select bbb.id from bbb);
geraria o erro esperado.