o que ambos disseram está certo, num join desses não deveria ser necessário fazer uma conversão, e deveria ter uma chave estrangeira nos campos do relacionamento.
Mais especificamente, o erro parece estar aqui:
ERRO: operador não existe: text = integer
LINE 10: and unif.unif_sigla = muni.muni_codigo
Não entendo porque quer comparar o código do município com a sigla do estado… Possivelmente o código do município, sendo numérico, é o id do município na tabela ou o código dele em alguma outra base de dados (como a do IBGE por exemplo), porque vc quer comparar isso?
Provavelmente a sua regra de joins está errada, acho que deveria ser algo assim:
where muni.muni_codigo = leil.leil_municipio -- ou leil.muni_codigo
and unif.unif_sigla = muni.unif_sigla -- ou juntar pelo id do estado
and unif_sigla <> 'RR'
Sobre “não aprender” join por usar join implícito não acho verdade, a lógica é a mesma, a diferença é que visualmente o join explícito fica mais lógico, mais fácil de dar manutenção e de entender olhando.
Sobre a necessidade dos aliases, não é verdade, você pode muito bem fazer uma consulta sem aliases, referenciando diretamente a tabela para chamar os campos, algo assim:
select unif_titulo as "titulo unif",
muni_titulo as "municipio titulo",
leil_codigo as "leilao codigo",
leil_nome as "leilao nome",
leil_dt_leilao as "data leilao"
from fazenda_v1.leilao,
fazenda_v1.municipio,
fazenda_v1.unidade_federacao
where fazenda_v1.municipio.muni_codigo = fazenda_v1.leilao.leil_codigo
and fazenda_v1.unidade_federacao.unif_sigla = fazenda_v1.municipio.muni_codigo
and unif_sigla <> 'RR'
order by unif_titulo asc
Mas você só pode fazer isso se não tiver usando a mesma tabela mais de uma vez numa consulta.
Obs: se os nomes das tabelas não forem repetidos, no “where” da consulta que eu coloquei os nomes delas “altamente qualificados”, pode-se remover os nomes dos schemas.