La sentencia en sí es esencialmente correcta (solamente son innecesarios los paréntesis que encierran esto:
usuario='miguel'). Lo que debes comprender es qué es lo que te devuelven: Te devolverá registros si hr_i esta entre '00:00:00' y '08:00:00', pero también si hr_f está entre '00:00:00' y '08:00:00'.
Esto implica que si se pone una hora cruzada, por ejemplo, '03:35:39' y '08:21:15', también te lo devolverá.
No queda claro si estás considerando estas dos alternativas (cruzado al inicio y cruzado al final), por lo que te lo menciono.
Si lo que quieres es el rango contenido entre las cotas de tiempo, BETWEEN por allí no es funcional, porque lo que tienes que hacer es comparar cad campo con una sola cota:
Código sql:
Ver originalSELECT *
FROM tbduser
WHERE usuario='miguel'
AND (hr_i >= '00:00:00' AND hr_f <= '08:00:00');