Revisando cuidadosamente tu código hay sólo una cosa que no se puede definir completamente: ¿Para qué usas la variable "fecha" que pones? No parece se rusada luego de cargada, por lo que no queda claro para qué existe.
Otra cosa que hay que aclarar es si realmente existe en las tres tablas consultadas para sumatorias el campo "Fecha", o esa es una referencia a la variable.
Te lo reformatee para poder verlo mejor (hacer todo amontonado no permite entender las consultas), y puse el inicio de la variable al inicio, que es donde debería ir, pero eso no debería afectar en nada.
Código MySQL:
Ver originalDELIMITER $$
(
FROM descuentos_empleados DE
AND DE.Empleado_Id
= EmpleadoId
AND DE.Estatus_Descuento
='Pendiente' );
SET Percepciones_Comisiones
= AND CO.Empleado_Id
= EmpleadoId
AND CO.Estatus_Descuento
='Pendiente' );
AND BO.Empleado_Id
= EmpleadoId
AND BO.Estatus_Descuento
='Pendiente' );
WHERE Empleado_Id
=EmpleadoId
);
SET Total_Percepciones
= IFNULL(Percepciones_Comisiones
, 0) + IFNULL(Percepciones_Bonos
, 0) + IFNULL(Sueldo
, 0);
SET Total_Quincena
= IFNULL(Total_Percepciones
, 0) - IFNULL(TDeducciones
, 0);
Nomina_Id,
Empleado_Id,
Fecha_Inicial,
Fecha_Final,
Deducciones,
Percepciones,
Sueldo_Neto,
Estatus_Registro)
NominaId,
EmpleadoId,
FechaI,
FechaF,
IFNULL(Total_Percepciones
, 0), 'Activo');
Ahora bien, si el SP sigue sin funcionar sólo quedaría una opción: Error de datos en las tablas intermedias consultadas...
Por cierto, ¿puedes postear la llamada a la consulta, tal y como la haces? Es decir el "CALL Alta_Nomina(..."