mysql – Eliminar duplicados en consulta sql server

Tengo la siguiente tabla donde almaceno las entradas y salidas de unos trabajadores en mi empresa ( id, numero_personal, fecha_entrada, fecha_salida).

Estoy intentando listar la ultima presencia de cada empleado y lo hago mediante la siguiente consulta.

SELECT id, numero_personal, fecha_entrada, fecha_salida FROM FICHAJES 
WHERE        (ID IN
                             (SELECT    MAX(id) AS Expr1
                               FROM     FICHAJES 
                                 where      fecha_salida is null
                               GROUP BY numero_personal ))
UNION

SELECT id, numero_personal, fecha_entrada, fecha_salida FROM FICHAJES 
WHERE        (ID IN
                             (SELECT    MAX(id) AS Expr1
                               FROM     FICHAJES 
                               GROUP BY numero_personal ))
1070    722 2007-03-01 00:00:00.000 2007-06-30 00:00:00.000
1075    723 2007-03-07 00:00:00.000 2007-06-06 00:00:00.000
1080    724 2007-03-08 00:00:00.000 2007-06-08 00:00:00.000
218     725 2007-03-19 00:00:00.000 2007-04-19 00:00:00.000
219     726 2007-03-21 00:00:00.000 2007-04-16 00:00:00.000
220     727 2009-03-23 00:00:00.000 NULL --> duplicado
1087    727 2007-03-26 00:00:00.000 2007-06-26 00:00:00.000 --> duplicado
1089    728 2007-03-26 00:00:00.000 2007-06-26 00:00:00.000
227     729 2009-04-20 00:00:00.000 NULL-> duplicado
1097    729 2007-04-09 00:00:00.000 2007-06-30 00:00:00.000-> duplicado
1102    730 2007-06-21 00:00:00.000 2007-09-21 00:00:00.000
1107    731 2007-06-21 00:00:00.000 2007-09-21 00:00:00.000
225     732 2007-04-10 00:00:00.000 2007-04-16 00:00:00.000

Esta consulta me devuelve registros duplicados en el caso de que el trabajador tenga una entrada con fecha_salida = null , es decir, este trabajando.

Si elimino el segundo select de la unión, solo me muestra los trabajadores que estan trabajando actualmente.

220     727 2009-03-23 00:00:00.000 NULL
227     729 2009-04-20 00:00:00.000 NULL

Si elimino el primer select, me muestra los datos mas antiguos de la tabla para ese id, no los actuales.

1070    722 2007-03-01 00:00:00.000 2007-06-30 00:00:00.000
1075    723 2007-03-07 00:00:00.000 2007-06-06 00:00:00.000
1080    724 2007-03-08 00:00:00.000 2007-06-08 00:00:00.000
218     725 2007-03-19 00:00:00.000 2007-04-19 00:00:00.000
219     726 2007-03-21 00:00:00.000 2007-04-16 00:00:00.000
1087    727 2007-03-26 00:00:00.000 2007-06-26 00:00:00.000 --> aqui deveria devolverme el que tiene fecha de salida null, el presente
1089    728 2007-03-26 00:00:00.000 2007-06-26 00:00:00.000
1097    729 2007-04-09 00:00:00.000 2007-06-30 00:00:00.000 --> aqui deveria devolverme el que tiene fecha de salida null, el presente
1102    730 2007-06-21 00:00:00.000 2007-09-21 00:00:00.000
1107    731 2007-06-21 00:00:00.000 2007-09-21 00:00:00.000
225     732 2007-04-10 00:00:00.000 2007-04-16 00:00:00.000

¿Como puedo solucionar esto?
¿Hay alguna manera de eliminar de la consulta si tiene el mismo id, el que no tenga valor null en fecha salida?