Is it possible to match two different Data types in PostgreSQL?
Yes, you can do this with either ANY as mentioned in @ypercube's comment, or with &lt;@ (the containment operator)

SELECT *
FROM departments
JOIN departments_users
  ON departments._id = ANY(department_id);
 _id | departmentname | active | _id | department_id 
-----+----------------+--------+-----+---------------
   1 | aa             |        |   1 | {1,2,3}
   2 | bb             |        |   1 | {1,2,3}
   3 | cc             |        |   1 | {1,2,3}
(3 rows)


If that doesn't work with an index you may need.

SELECT *
FROM departments
JOIN departments_users
  ON department_id @&gt; ARRAY[departments._id];