Isso é esperado e documentado.
Citação do manual
Você pode use CTEs encadeados para excluir a empresa:
with deleted_emp as (
delete from employee
where id = 1
returning company_id, id as employee_id
)
delete from company
where id in (select company_id from deleted_emp)
and not exists (select *
from employee e
join deleted_emp af
on af.company_id = e.company_id
and e.id <> af.employee_id)
É importante excluir o funcionário que acabou de ser excluído do
not exists
subconsulta, pois sempre estará visível na segunda instrução de exclusão e, portanto, o não existe nunca seria verdadeiro. Portanto, a subconsulta verifica essencialmente se há um funcionário diferente do excluído atribuído à mesma empresa. Exemplo on-line:https://rextester.com/IVZ78695