U krijgt dubbele kolommen omdat u, zoals u die hebt, een query uitvoert vanuit T1 EN T2. Dus tenzij je expliciet zegt laat me alleen T1.* zien, worden kolommen uit BEIDE tabelaliasverwijzingen gehaald.
Aangezien uw zoekopdracht een OK doet op de datums, krijgt u waarschijnlijk ook een Cartesiaans resultaat.
Je kent nu je tabelstructuur, maar misschien ben je beter met een expliciete vraag, zoiets als...
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'
Zorg voor een index op uw "my_table" op basis van (dag, kwaliteit) om de zoekopdracht te optimaliseren. En je kunt gewoon in paren de kolommen blijven toevoegen die je probeert te vergelijken tussen dag1 en dag2. T1 retourneert alleen de items die zijn gekoppeld aan de eerste dag en de T2-alias wordt alleen weergegeven voor overeenkomende items voor de tweede datum.
Als er nu alleen vermeldingen zijn aan de T1-zijde zonder corresponderende T2-invoer voor de kwaliteit en datum in kwestie, maar u wilt die toch zien, verander dan gewoon de JOIN in een LEFT JOIN.