Group by e distinct rendono un solo record per ogni raggruppamento.
il record che ti rendono non lo puoi scegliere perche' sara' il primo che fisicamente viene trovato nello scorrere della tabella. A volte segue l'ordine cronologico dell'inserimento altre invece a seguito di cancellazione di un record precedente si puo' trovare fisicamente inserito in una posizione diversa.
E' la logica del raggruppare. Prendo un id, il primo che trovo corrispondente a quanto richiesto che mi identifichi i valori raggruppati.
GROUP BY seminari.titolo, day, corso
ORDER BY oraIn, corso, seminari.titolo
viene preso il primo record che rappresenti titolo, day, corso e vengono scartati tutti gli altri uguali, order by oraIn non serve perche' avrai un solo record che si porta dietro una oraIn casuale rispetto alla lista oraIn di quel dato giorno raggruppato. Prova a raggruppare anche per oraIn.
l'ordine con cui sono memorizzati i dati e' casuale per definizione. Ogni record viene individuato e ordinato con una chiave primaria, ma fisicamente sara' dove c'era un buco libero per essere messo.
Ho cercato di dare una risposta alla tua domanda ma non sono entrato nel merito della query se non per le ultime due righe.