Você está obtendo colunas duplicadas porque, como você tem, está consultando de T1 E T2. Portanto, a menos que você diga explicitamente mostre-me apenas T1.*, ele pegará colunas de AMBAS as referências de alias de tabela.
Como sua consulta está fazendo um OR nas datas, você provavelmente também obterá um resultado cartesiano.
Agora conhecendo sua estrutura de tabela, mas você pode ser melhor com uma consulta explícita algo como ...
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'
Tenha um índice em sua "my_table" com base em (dia, qualidade) para otimizar a consulta. E você pode continuar adicionando em pares, as colunas que você está tentando comparar entre dia1 e dia2. T1 retornará apenas aqueles associados ao primeiro dia, e o alias T2 será exibido apenas para entradas correspondentes para a segunda data.
Agora, se houver apenas entradas no lado T1 sem entrada T2 correspondente para a qualidade e data em questão, mas você ainda deseja vê-las, basta alterar o JOIN para LEFT JOIN.