I would avoid both of these approaches. You must accomplish what you are trying to do, with a reasonable use of AND
, OR
, IS NULL
and parentheses.
For example, you can rewrite this:
WHERE u.id = COALESCE(user_id, u.id) AND su.custom_id = COALESCE(student_number, su.custom_id)
Like this:
WHERE (user_id IS NULL OR u.id = user_id) AND (su.custom_id = student_number)
And you can rewrite this:
WHERE CASE WHEN user_id IS NOT NULL AND LENGTH(user_id) > 0 THEN u.id = user_id ELSE su.custom_id = student_number END
Like this:
WHERE (user_id IS NOT NULL AND LENGTH(user_id) > 0 AND u.id = user_id) OR (su.custom_id = student_number)
source share