Vamos fazer assim então:
SELECT O.tecnico
FROM ordem O
WHERE O.data_agenda = '$hoje'
AND O.empresa = '$i'
AND O.tecnico != 0
AND O.tecnico NOT IN (SELECT O2.tecnico FROM ordem O2 WHERE O2.status='2')
GROUP BY O.tecnico
Agora vai.
A propósito, usar um campo text pra armazenar "2" é um exagero. Não poderia ser tinyint?
Leob,
Genial! Funcionou perfeitamente!
Muito obrigado pela ajuda. Além de resolver meu problema, ainda me ensinou a lógica por trás da query.
Parabéns pela proatividade, conhecimento e vontade de ajudar os colegas em dificuldades.
Um abraço.
Gustavo.
E seguindo sua orientação alterei também o tipo do campo status.