Yo antes tenia hecho asi e vuelve NULL, quando id_tecnico es NULL, como ahora:
Código SQL
[-]select
case when id_tecnico is null then
(select coalesce(max(id_tecnico),1) from staff_tecnico)
else
(select max(id_tecnico)+1 from staff_tecnico)
end as chave
from staff_tecnico
El resultado es NULL, pues el id_tecnico es NULL y deberia ser 1.