A seconda che l'orario sia antecedente o meno a mezzogiorno, viene sottratto il valore minore da quello maggiore. Come può restituire un valore negativo?
Fammi un esempio concreto di orario che ti restituisce un numero negativo.
edit.
codice:
select campo_time,
if(campo_time>='12:00:00',time_to_sec(timediff(campo_time,'12:00:00')),time_to_sec(timediff(campo_time,'12:00:00'))+86400) as differenza
from tabella
I valori non potevano mai essere negativi ma c'era un errore di logica.
Adesso dovrebbe essere giusto. Credo.