With its star striker on the bench because of a left-knee injury, Madrid could afford to miss an early penalty and still go through 3-2 on aggregate.
"We are pleased to have reached the semis, that was our goal. But we are not pleased with the way we did it,'' Madrid coach Carlo Ancelotti said.
Marco Reus scored in the 24th and 37th minutes, both times after Madrid mistakes, while Borussia Dortmund wasted several excellent opportunities in the second half, including a shot against the post.
Nine-time champion Madrid has lost in the semifinals for the past three years - and was eliminated last season by Borussia Dortmund.
Robert Lewandowski, who scored four goals in a 4-1 home win for Borussia Dortmund last season, returned after suspension but failed to score.
Borussia Dortmund coach Juergen Klopp said he was "proud of the image'' his team projected - but lamented its failure to score in Madrid.
"That is where we lost this tie, we played badly there,'' Klopp said.
In Tuesday's other match, 2012 champion Chelsea beat Paris Saint-Germain 2-0 in west London to reach the last four on the away goals rule after a 3-3 draw on aggregate.
Madrid had some late chances but failed to find the net for the first time after a record run of 34 Champions League matches with at least one goal scored.
Borussia Dortmund dominated in the first half despite conceding a generously awarded penalty.
A cross from Fabio Coentrao in the 17th minute hit Lukasz Piszczek in the arm. Angel Di Maria took the spot kick but Roman Weidenfeller dived to his left and saved the shot.
"That was no penalty,'' Klopp said.
Reus opened the scoring after a botched attempt by Pepe to head a long ball back to Iker Casillas. The Madrid keeper mistimed his approach and Reus chipped the ball past him before slotting home.
Reus doubled the lead after another mistake by Madrid as it tried to move the ball forward. Reus passed to Robert Lewandowski, whose shot hit the post, but Reus was there to drive the rebound into the roof of the net.
"After we missed the penalty, they got the upper hand. We lost possession too often and we basically gifted them the goals,'' Ancelotti said. "It could have ended differently, but we were more clever in the second half.''
For Madrid, Karim Benzema narrowly failed to connect with a low ball from Gareth Bale at the far post in the 59th minute. Moments later, Benzema had claims for a penalty denied after contact with Hummels.
Borussia Dortmund could easily have leveled the tie in the 65th, when Reus put through Mkhitaryan, who rounded Casillas but shot against the post from an acute angle.
Casillas then saved two more attempts from the Armenian.
"We suffered, that's what happens in these types of games, but we're into the semifinals,'' said Casillas, who only plays in the Champions League and the Spanish cup.
Weidenfeller made a good late save from Benzema, after the France striker had turned two Borussia Dortmund defenders in the 80th.
Ancelotti said Ronaldo did not have a "major problem'' and was kept on the bench as a precaution.