LEFT JOIN-ing the same MySQL View multiple times makes some of the Views derived

I have a Hibernate-generated query that LEFT OUTER JOINs MySQL Views on some of the columns.

The query performs really poor so I EXPLAIN-ed it and found that in some cases the same View is treated as a derived select.

Here is my query generated by Hibernate. I have simplified it for the sake of the example:

SELECT
   * 
FROM
   `task` `task` 
   LEFT OUTER JOIN
      `view_users` `vu` 
      ON `task`.`created_by` = `vu`.`id` 
   LEFT OUTER JOIN
      `view_users` `vu2` 
      ON `task`.`updated_by` = `vu2`.`id`

The view_users MySQL View that I use in the LEFT OUTER JOINs is this:

SELECT 
    `user`.`id` AS `id`,
    `role`.`role` AS `role`,
    `branch`.`name` AS `branch_name`,
    `address`.`city` AS `city`
FROM
    ((((`user` `user`
    JOIN `role` `role` ON ((`user`.`role_id` = `role`.`id`)))
    LEFT JOIN `branch` `branch` ON ((`branch`.`id` = `user`.`branch_id`)))
    LEFT JOIN `address` `address` ON ((`address`.`id` = `user`.`address_id`)))

The result of the EXPLAIN is the following: enter image description here

Here I noticed that task.created_by has PRIMARY select_type, while task.updated_by is treated as DERIVED, and because of this, MySQL will scan 54876 rows when LEFT OUTER JOINing the view_users View on task.updated_by.

After this I used EXPLAIN EXTENDED, then SHOW WARNINGS, and I got the following query that has been "rewritten" by MySQL:

SELECT
   * 
FROM
   `task` `task` 
   LEFT JOIN
      (
         `user` `user` 
         JOIN
            `role` `role` 
         LEFT JOIN
            `branch` `branch` 
            ON((`branch`.`id` = `user`.`branch_id`)) 
         LEFT JOIN
            `address` `address` 
            ON((`address`.`id` = `user`.`address_id`)) 
      )
      ON(((`role`.`id` = `user`.`role_id`) 
      AND 
      (
         `user`.`id` = `task`.`created_by` 
      )
)) 
   LEFT JOIN
      `view_users` `vu` 
      ON((`vu`.`id` = `task`.`updated_by`))

Here we can see that the view_users View that has been joined on task.created_by is "resolved", while on task.updated_by it will use view_users.

Why does MySQL derives Views for some occasions and not for others?

Ideally I would expect that task.updated_by would not be derived, so the performance of the original query would be much better.