Why my title change the last post title in my loop?

To start this off, you should not be using query_posts for custom queries. Directly from the codex

Note: This function isn’t meant to be used by plugins or themes. As explained later, there are better, more performant options to alter the main query. query_posts() is overly simplistic and problematic way to modify main query of a page by replacing it with new instance of the query. It is inefficient (re-runs SQL queries) and will outright fail in some circumstances (especially often when dealing with posts pagination).

You should be using WP_Query. You should also have a read here

Ok, now to the actual problem. You have the_title() and wp_title() mixed up here. the_title() displays the post title in posts, and should be in the loop. wp_title() retrieves page title, and should be used in the header. Again I quote from the codex

This function, and not a work-around, is required for publicly by WordPress standards.

So you need to change

 <title><?php the_title(); ?></title>

to

 <title><?php wp_title(); ?></title>

in your header