Cita: lo que hace es listar primero todos los funcionarios ya que todos tienen departamento(cod_dep) y seguido me lista todos los funcionarios que tiene dependencia(cod_depen) duplicando los registros y me arroja 26 en total.
La duplicación de registros iguales en un UNION ALL
es el resultado normal y esperado de esa forma de UNION.
Si quieres que los registros no se repitan, debes usar UNION, no UNION ALL.
Cita: Lo que pasa es que tengo 15 usuarios en la tabla funcionario y 4 de ellos tienen el campo cod_depen en 0 ya que no pertenecen a ninguna dependencia. Estoy tratando de hacer una consulta donde me traiga todos los funcionarios tengan o no dependencia,
Pues para obtener esa lista, tal y como la describes, simplemente sería omitiendo la condicion sobre el COD_DEPEN, al menos si lo haces en una sola tabla.
Para hacerlo con un JOIN debes usar LEF>T JOIN.
Código MySQL:
Ver originalSELECT F.cod_fun
, F.nombres
, F.apellidos
, F.numdoc
, F.cod_dep
, D.cod_dep
, D.dtalle_dep
FROM funcionario F LEF
JOIN departamentos F
ON F.cod_dep
= D.cod_dep