Resultado estranho ao usar a instrução UNION no SQL

Pessoal,

Estou com dificuldades em unir duas queries através do comando UNION do SQL.
A primeira query extrai, de uma tabela ESTAGIO_DOCENCIA2, os dados relativos aos docentes do quadro permanente de uma universidade(chamados tipo = 2 -> docentes SIAPE).

select null as id_orientacao_atividade,
       null as id_registro_atividade,
       ed.egd_professor as id_servidor,
       egd_carga_horaria as carga_horaria,
       null as orientador_externo
from   estagio_docencia2 ed, historico_servidores hs
where  ed.egd_tipo_professor = 1
and    ed.egd_professor = hs.his_ser_matricula_siape
and    hs.his_ano_exercicio = (select max(s1.his_ano_exercicio) from srh.historico_servidores s1) 

Esta query retorna um total de 1847 registros.
A segunda query, extrai, da tabela supracitada, os dados relativos a docentes externos à instituição (docentes tipo = 2 -> docentes não-SIAPE).

select null as id_orientacao_atividade,
       null as id_registro_atividade,
       ed.egd_professor as id_servidor,
       egd_carga_horaria as carga_horaria,
       null as orientador_externo
from   estagio_docencia2 ed, outros_docentes_pesquisadores odp
where  ed.egd_tipo_professor = 2
and    ed.egd_professor = odp.odp_cod_docente_pesqui

Esta segunda query retorna um total de 42 registros.
O total de registros, somando-se os totais de registros obtidos executando-se as queries individualmente é, portanto, de 1889 registros.
Então, criadas as queries individuais, juntei as duas em um mesmo script através da operação SQL UNION, da seguinte forma :

select null as id_orientacao_atividade,
       null as id_registro_atividade,
       ed.egd_professor as id_servidor,
       egd_carga_horaria as carga_horaria,
       null as orientador_externo
from   estagio_docencia2 ed, historico_servidores hs
where  ed.egd_tipo_professor = 1
and    ed.egd_professor = hs.his_ser_matricula_siape
and    hs.his_ano_exercicio = (select max(s1.his_ano_exercicio) from srh.historico_servidores s1) 
union
select null as id_orientacao_atividade,
       null as id_registro_atividade,
       ed.egd_professor as id_servidor,
       egd_carga_horaria as carga_horaria,
       null as orientador_externo
from   estagio_docencia2 ed, outros_docentes_pesquisadores odp
where  ed.egd_tipo_professor = 2
and    ed.egd_professor = odp.odp_cod_docente_pesqui

O estranho é que a execução da query completa acima, que usa o UNION para juntar os resultados das queries individuais, retornou um total de apenas 834 registros.
Não deveria, esta query, retornar um resultado de : 1847 + 42 registros = 1889 registros.

Alguém poderia me ajudar a descobrir qual o problema que está acontecendo, pois não estou conseguindo ?
Agradece,

Max Carvalho

Qual sgbd?
Tenta com union all

Na realidade, o script será utilizado em uma migração de dados de Oracle para PostgreSQL.
Já deu certo com o UNION ALL.
Problema solucionado.
Muito obrigado pela resposta.
Att,

Max Carvalho