Algebra of joins, is there ever a need to repeat a table in a series of joins?
Dependent on context (chain) addressing to the same table can mean different sets of rows. So you have to point them by two different aliases to avoid ambiguity.

Let's imagine we want to build the list of customers and their suppliers both with cities where they reside:

SELECT w.name AS customer,
       s.city AS c_city,
       z.name AS supplier,
       r.city AS s_city
  FROM customers      AS w
  LEFT JOIN suppliers AS z ON z.id = w.supplier_id
  LEFT JOIN cities    AS s ON s.id = w.city_id
  LEFT JOIN cities    AS r ON r.id = z.city_id
ORDER BY w.name ASC;


Here same table is joined twice because each join performed on it's own condition and produce different resulting city names - one for customer and one for supplier. And there is no way to achieve the desired result without joining the same table twice. 

P.S.

Let's imagine we have the list of cities visited by tourist:

-------------------------------------
| ID | DATE | CITY_ID | PREVIOUS_ID |
-------------------------------------


Here PREVIOUS_ID is the reference to the row in the same table and it mean " the city  tourist come from". And now we want to build the route containing last four visited cities to the some point:

SELECT * 
   FROM visited      AS w
   JOIN cities       AS z ON z.id = w.city_id
   LEFT JOIN visited AS r ON r.id = w.previous_id
   LEFT JOIN cities  AS s ON s.id = r.city_id
   LEFT JOIN visited AS q ON q.id = r.previous_id
   LEFT JOIN cities  AS d ON d.id = q.city_id
   LEFT JOIN visited AS x ON x.id = q.previous_id
   LEFT JOIN cities  AS f ON f.id = x.city_id
 WHERE w.id = 12345; -- last position


As you can see we can easely join again and again the same tables.