Right and Left joins perform the same function. What's different in your examples is the tables that you are SELECTing from.
These two queries:
select j2.name,j2.department
from join_test j1 left join join_test j2
on(j1.department=j2.department and j1.name<>j2.name)
and
select j1.name,j1.department
from join_test j1 right join join_test j2
on(j1.department=j2.department and j1.name<>j2.name)
Produce the same result:
NAME DEPARTMENT
stelios sa
andros sa
stav ba
mary ba
(null) (null)
(null) (null)
The reason for the difference in results that you see between your left and right queries is that in the left example, you are SELECTing from the "driving" table (the left table, J1). The join is showing all rows from the driving table (J1), and matching rows (which are not displayed) from the right-hand, or non-driving table (J2).
In your right example, you are changing the join but still selecting from J1. Since J1 is now the non-driving table, you are only seeing the matched results from J1. If you add J2 columns to the select, you will see all of its rows:
NAME DEPARTMENT NAME DEPT
stelios sa andros sa
andros sa stelios sa
stav ba mary ba
mary ba stav ba
(null) (null) antonia la
(null) (null) lambros ka
You will see this same result with a LEFT join, but the nulls would be no the other side.
In both cases, the (null) rows represent the rows from the driving table that are not matched in the non-driving table.