Ваша проблема заключается в переносе времени на следующую дату.Я бы порекомендовал:
select (case when @start <= @end
then datediff(hour, @start, @end)
else 24 - datediff(hour, @end, @start)
end) as diff_hours
Вы также можете выразить это как:
select (24 + datediff(hour, @start, @end)) % 24