Stai ricevendo colonne duplicate perché, così com'è, stai interrogando da T1 E T2. Quindi, a meno che tu non dica esplicitamente mostrami solo T1.*, acquisirà colonne da ENTRAMBI i riferimenti alias di tabella.
Poiché la tua query sta eseguendo un OR sulle date, probabilmente otterrai anche un risultato cartesiano.
Ora conoscendo la struttura della tua tabella, ma potresti essere migliore con una query esplicita simile a...
SELECT
t1.day,
t2.day as OtherDay,
t1.quality,
t1.anotherColumn,
t2.OtherAnotherColumn,
t1.thirdColumn,
t2.OtherThirdColumn
FROM
my_table t1
join my_table t2
on t1.quality = t2.quality
AND t2.day = '2015-01-09'
where
t1.day = '2015-01-08'
Avere un indice sulla tua "mia_tabella" basato su (giorno, qualità) per ottimizzare la query. E puoi semplicemente continuare ad aggiungere in coppia le colonne che stai cercando di confrontare tra il giorno1 e il giorno2. T1 restituirà solo quelli associati al primo giorno e l'alias T2 verrà visualizzato solo per le voci corrispondenti per la seconda data.
Ora, se ci sono solo voci sul lato T1 senza una voce T2 corrispondente per la qualità e la data in questione, ma vuoi comunque vederle, cambia semplicemente JOIN in un LEFT JOIN.