Inter would have leapfrogged their opponents with victory in Spain but could not convert their chances.
Lautaro Martinez volleyed over from close range, Edin Dzeko headed straight at Thibaut Courtois and Ivan Perisic flicked a header against the post.
Toni Kroos scored the opener for Real and Marco Asensio curled in the second.
Former Germany international midfielder Kroos’ effort was the La Liga side’s 1,000th goal in the European Cup, becoming the first club to reach that landmark.
Substitute Asensio’s strike – a minute after coming on – was a beauty, picking the ball up on the edge of the box and caressing a finish into the top corner.
Carlo Ancelotti’s men could have doubled their lead before half-time but Rodrygo struck the foot of the post and smashed into the side-netting from a promising position shortly after.
Inter were chasing the game in the second period but were unable to get on the scoresheet with midfielder Nicolo Barella sent off just after the hour mark for lashing out at defender Eder Militao.