A Sergio Busquets header and a Lionel Messi penalty, both in the first half, gave Barca their first win in six outings in all competitions.
They opened up a six-point lead over chasing Real, whose 10-match winning streak came to an end against Atletico.
Diego Forlan put Atletico ahead before the break and Klaas-Jan Huntelaar levelled in the 57th minute.
The visitors, who beat Barca last weekend, missed a host of second-half chances to claim their first derby win since 1999.
Barca have 63 points with 12 matches left. Atletico remain fifth with 40 points, behind champions Real (57), Sevilla (47) and Villarreal (45).
The emotion of reaching their first Copa del Rey final in 24 years in midweek appeared to take its toll on Bilbao who were second best against their fellow finalists at the Nou Camp.
Barca suffered an early fright when Fran Yeste burst clear only to fire wastefully wide but in the 17th minute they went ahead when Busquets met Xavi's free kick from wide on the left with a powerful header.
The hosts then won a penalty when Andres Iniesta was bundled over as he dribbled into the area in the 32nd minute, Messi putting away the spot kick.
Barca threatened to cut loose after the interval. Iniesta lashed a shot against the post, Bilbao cleared a shot off the line and Samuel Eto'o rattled the crossbar.
Atletico were the more adventurous at the Bernabeu but Leo Franco was the busier goalkeeper until Sergio Aguero made his presence felt.
The Argentine executed a slick backheel to launch a counter-attack and after receiving a return pass he squared for Forlan to beat keeper Iker Casillas in the 38th minute.
After the break Real coach Juande Ramos brought on Gonzalo Higuain for Guti and he made an immediate impact, feeding Huntelaar on the edge of the area.
The Dutch striker turned his marker and fired high into the net, though television replays showed he had been in an offside position.
Atletico refused to wilt, Forlan hitting the post and substitute Florent Sinama Pongolle firing wide when well placed.
In the evening's late game, Villarreal took full advantage of Atletico's draw by beating struggling Espanyol 1-0 at El Madrigal.
Argentinian defender Fabricio Fuentes converted a 20th-minute penalty to open the Yellow Submarine between his side and fifth-placed Atletico to five points.