Quando me deparo com o problema de sempre retornar exatamente uma linha, geralmente uso agregação. O seguinte retornará
NULL
se não houver correspondência:select max(employee_id)
from employee
where name = 'John_Doe';
O seguinte retorna 0:
select coalesce(max(employee_id), 0)
from employee
where name = 'John_Doe';