LMDP_1978,
¿Qué versión del motor de SQL Server tienes? Imagino que tienes una versión inferior a SQL Server 2008 ya que no haces uso del tipo de dato time para almacenar valores de tiempo, ¿verdad?
--Declarar variables según ejemplo
DECLARE @FechaInicio datetime = '20160623';
DECLARE @HoraInicio varchar(5) = '05:00';
DECLARE @FechaFin datetime = '20160624';
DECLARE @HoraFin varchar(5) = '02:35';
--Agregar minutos y horas a un tipo datetime
SET @FechaInicio = DATEADD(MINUTE, (CONVERT(tinyint, LEFT(@HoraInicio, 2)) * 60) + CONVERT(tinyint, RIGHT(@HoraInicio, 2)), @FechaInicio);
SET @FechaFin = DATEADD(MINUTE, (CONVERT(tinyint, LEFT(@HoraFin, 2)) * 60) + CONVERT(tinyint, RIGHT(@HoraFin, 2)), @FechaFin);
--Obtener diferencia en minutos entre ambas fechas
DECLARE @DiferenciaMinutos int = DATEDIFF(MINUTE, @FechaInicio, @FechaFin);
--Mostrar diferencia en formato hh:mm
SELECT CONVERT(varchar(10), @DiferenciaMinutos / 60) + ':' + CONVERT(varchar(10), @DiferenciaMinutos % 60);
En caso tengas una versión igual o superior a SQL Server 2008 puedes castear el tiempo al tipo
time(n).