The Portuguese international struck after six minutes and added another early in the second half, with further goals from Sergio Ramos and Daniel Carvajal securing Real's fourth win in a row, which lifts them three points behind leaders and city rivals Atletico Madrid.
Osasuna, however, have won just one of their last ten league matches and sit three points above the bottom three having played more games than the teams below them.
Getafe's 1-0 win over Malaga earlier in the afternoon had sealed their fate, leaving this match to be played out in a subdued atmosphere at the Estadio Manuel Ruiz de Lopera as Betis fell to a 23rd defeat of a miserable season, losing 1-0.
Sociedad were hardly at their best, but did enough to take advantage thanks to Carlos Vela's penalty early in the second half. The win puts them 12 points clear of Valencia, who have four games remaining but lose out to Sociedad on the head-to-head record.
Getafe's victory came despite them having Ciprian Marica sent off in the first half as they went on to claim their first home win in five months.
The Romanian striker provided the assist for the only goal of the game, scored by Adrian Colunga, but then picked up a second caution before the break.
However, the visitors were unable to make the most of having an extra man and lost that advantage when their defender Marcos Angeleri was sent off with a quarter of an hour left.
Rayo Vallecano continued their march up the league table as a second-half blitz earned them a 3-0 win at ten-man Granada.
The hosts had Yacine Brahimi sent off soon after the break for a second yellow card and moments later Atletico Madrid loanee Saul Niguez broke the deadlock with a 30-yard strike.
Rayo's top scorer Joaquin Larrivey doubled the lead five minutes later to put Rayo on their way a seventh win in ten games and substitute Seba Fernandez added a third late on, netting for the first time in more than two years.