La verdad simulé tu escenario, y me respeta el where.
Solo me borra el registro que le paso.
Prueba sin hacer uso de alias y nombrando el campo de entrada diferente a la columna.
Código SQL:
Ver originalCREATE OR REPLACE FUNCTION borrarnomina(v_id_nomina INTEGER)
RETURNS INTEGER AS
$$
DECLARE
tempo INTEGER;
BEGIN
DELETE FROM ONLY conceptodetalle WHERE id_nomina=v_id_nomina;
--execute cadena into tempo;
--if (FOUND)
-- then
-- delete from only detallenomina where id_nomina=$1;
-- execute cadena into tempo;
--if (FOUND)
-- then
-- delete from only nomina where id_nomina=$1;
--execute cadena into tempo;
--if (FOUND) --tempo
-- then
-- commit;
-- return 1;
--else
-- rollback;
--return 0;
-- end if;
--else
-- rollback;
-- return 0;
--end if;
--else
-- rollback;
--return 0;
--end if;
RETURN 1;
END;
$$
LANGUAGE 'plpgsql';