Loop not showing first post

It looks OK to me. There is nothing wrong with this part of your code.

Maybe some earlier part is doing something strange with your $wp_query variable.

You can try to add rewind_posts() before your loop – it should help. Just place rewind_posts(); just before if (have_posts())....