Nadal saved 16 break points, lost serve only once and earned his third consecutive Roland Garros title by beating Federer 6-3, 4-6, 6-3, 6-4.
For the third consecutive year in Paris, the top-ranked Federer sought to become the sixth man to win all four Grand Slam events. Nadal beat him in the semifinals in 2005 and in the final last year.
The latest loss also spoiled Federer's bid to win a fourth consecutive major title, something last done by Rod Laver in 1969.
With a sequence of brilliant shots, Federer won many of the highlight-reel rallies, but squandered chances doomed him. He failed to convert his first 11 breakpoint chances, putting pressure on his own serve by repeatedly allowing Nadal to hold.
The Spaniard broke four times in 10 chances and had only 27 unforced errors to 59 for Federer.