Lo más que me está saliendo es la misma SQL haciéndole el CAST a los campos de tipo Hora para que trabajen como tal:
Código SQL:
Ver originalSELECT P.*
FROM PARTESTRABAJO P
INNER JOIN ASISTENCIAS A ON P.CodigoTrabajador=A.CodigoTrabajador AND P.Fecha=A.Fecha
WHERE CAST(P.HoraFin AS DateTime) NOT BETWEEN CAST(A.HoraInicio AS DateTime) AND CAST(A.HoraFin AS DateTime)
AND P.CodigoTrabajador='ERIC'
AND P.Fecha = '20090710'
Pero como comenté, aparecen los cuatro registros de PARTESTRABAJO y uno más repetido.
Veo que lo que está haciendo esta consulta es mostrar el registro de PARTESTRABAJO una vez por cada registro de ASISTENCIAS y luego elimina las que no cumplen el WHERE. Pero exactamente no es eso.
Podemos ver que ese día hay 2 ASISTENCIAS, la consulta comprueba la HoraFin del PARTETRABAJO con cada una de ellas. Lo correcto sería que si en una de ellas ya está correcta (ya se encuentra la HoraFin dentro de la franja de alguna de las asistencias) no apareciera.. uff, no se si me he explicado correctamente... Espero que si.
Gracias por el esfuerzo a quien se tome un momento con esto.
Saludos.