Carles Puyol is the hero as Spain beat Germany 1-0 to make their first ever World Cup final, where they will face the Netherlands.