Вы можете использовать iif в операторе where. Но синтаксис на первый взгляд не выглядит интуитивно понятным. Где ожидает логическое предложение, так что вы должны конвертировать
IIF (@turno == 0, AND P.codTurno = @turno , )
до
IIF (@turno= 0, -1, @turno) = P.codTurno
Обратите внимание, что каждый раз, когда параметр @turno имеет значение 0, мы изменяем его на -1 (или что-то, в чем вы уверены, что нет и не будет в этом столбце в базе данных.
Итак, в конце ваш код SQL должен выглядеть примерно так
SELECT
P.NombreCompleto
FROM (((((((Persona AS P
LEFT JOIN MarcacionTemp AS MTemp ON P.codPersona = MTemp.codPersona)
LEFT JOIN Horario AS Ho ON MTemp.codHorario = Ho.idHorario)
LEFT JOIN TipoMarcacion AS TMar ON MTemp.codTipoMarcacion = TMar.idMarcacion)
INNER JOIN Colegio AS C ON P.codColegio = C.codColegio)
INNER JOIN Entidad AS E ON P.codEntidad = E.codEntidad)
INNER JOIN Grado AS Gr ON P.codGrado = Gr.codGrado)
INNER JOIN Paralelo AS Pa ON P.codParalelo = Pa.codParalelo)
INNER JOIN Turno AS Tu ON P.codTurno = Tu.codTurno
WHERE P.codTipo = 4
[and/or] IIF (@turno=0, -1, @turno) = P.codTurno
[and/or] IIF (@grado=0,-1, @grado) = P.codGrado
[and/or] IIF (@paralelo=0, -1, @paralelo) = P.codParalelo