Agora entendi, bem nesse caso especificamente, fica um pouco mais complexo, porque isso é um problema que deveríamos tratar já no momento de criação da estrutura do banco de dados, vendo como analista de banco de banco de dados, seria ideal que ambos os campos DATA e HORA fossem um campo só do tipo TIMESTAMP, assim poderíamos buscar da seguinte forma:
SELECT * FROM [NOTAS FISCAIS] WHERE DATA_HORA BETWEEN '2015-01-01 08:00:00' AND 2015-01-02 08:00:00';
Mas dessa forma utilizando dois campos, um para DATA e outro para HORA, teríamos que utilizar o OU (OR) para também incluirmos os dados do outro dia, então recuperamos as vendas do dia 2015-01-01 feitas entre '08:00:00' e '23:59:59', e também as vendas do dia 2015-01-02 feitas entre '00:00:00' e '08:00:00', como na consulta abaixo:
SELECT * FROM [NOTAS FISCAIS] WHERE (DATA = '2015-01-01' AND HORA BETWEEN '08:00:00' AND '23:59:59') OR (DATA = '2015-01-02' AND HORA BETWEEN '00:00:00' AND '08:00:00');
Um outro detalhe é que usando um campo do tipo TIMESTAMP, mantemos um histórico temporal dos dados, e fica mais fácil essas consultas.
Espero ter esclarecido sua dúvida!