Perdona, me confundí. Creo que esta es la más apropiada (no la he probado):
Código sql:
Ver originalSELECT id_usuario, nombre_usuario
FROM usuarios
WHERE id_usuario NOT
IN (
SELECT DISTINCT id_usuario
FROM itinerario_tareas
WHERE (
'09:30:00' <= fecha_hora_inicio
AND '11:15:00' >= fecha_hora_inicio
)
OR (
'09:30:00' >= fecha_hora_inicio
AND '09:30:00' <= fecha_hora_fin
)
)
La lógica es:
si la primera hora es menor o igual que la fecha_hora_inicio, la segunda hora debe ser mayor o igual que esa fecha_hora_inicio para ocupar algo del rango; si la primera hora es posterior a la fecha_hora_inicio, esa primera hora debe ser también anterior o igual a la fecha_hora_fin para ocupar algo del rango. Los iguales pueden parecer redundantes, pero no estorban y aseguran todas las situaciones, aunque en ocasiones se encuentre dos veces, es decir por las dos opciones del OR.