Eu testei a subconsulta do @Abdullah e de fato obtive o oposto do que eu queria. Depois de alguns testes, acabei com as consultas aninhadas que me dão o que eu estava procurando:
select distinct entity_id from construction
where entity_id not in (
select entity_id from construction c left outer join available a on a.id = c.component_id
where a.id is null
);