Hola migo estube checando tu query me funciono perfectamente pero no podia tomar como referencia el campo que estado para pintar mi php por lo que tube que poner un capo real que se llamava IdStatusr en la tabla bici y en la tabla resetrvacion pero ahora me duplica el dato me muesstra todo en libre y me muestra tambien la que esta ocupada con el estado = 2 ya estuve jugadno don el inner y left pero no lo logro solucionar me podria ayudar .
modifique el query para que leyera ese campo aqui esta
Código PHP:
SELECT r.IdBicicleta, r.IdStatusr
FROM reservaciones r
left JOIN horarios h
ON h.IdHorario = r.IdHorario
WHERE h.IdHorario = '2' and r.IdStatusr = '2'
UNION ALL
SELECT b.IdBicicleta,b.IdStatusr
FROM bicicletas b
WHERE (b.IdStatusr,b.IdBicicleta) not in (SELECT r.IdBicicleta, r.IdStatusr
FROM reservaciones r
left JOIN horarios h
ON h.IdHorario = r.IdHorario
WHERE h.IdHorario = '2' and r.IdStatusr = '2' Order by b.IdBicicleta asc)
imagen con lo que muestra

