Force using an Index in Inner Join SELECT
The goto solution to improve queries should not be query or table hints.

You should try other solutions like changing the query, adding or changing indexes first.

If the optimizer is still making mistakes after trying other workarounds then you might try adding a query / table hint.

Table variable estimates

The table variables have low estimates (one , two rows) while 850 rows or even 16.284 rows can be returned. 
This is impacting the rest of the query.

Estimated plan on the inner join query:



Actual query plan on the inner join query:


Consider changing the table variables to temporary tables:

CREATE TABLE #lTemas(TemaId int);
INSERT INTO #lTemas (TemaId)
SELECT t.TemaId FROM Temas t
INNER JOIN @lClientes lc ON lc.n = t.ClienteId
AND nEstado &gt; 0;


or adding OPTION(RECOMPILE) to the main query.



Indexing

Next to these awful estimates, the query gets filtered from 127.689 rows to 4.071 rows at this point:



This could be due to the predicate on dNota



** possible fix**

Consider adding an index on dNota first

CREATE INDEX  IX_dNota_ArtId
ON dbo.NotasHist(dNota,ArtId)
INCLUDE(bTipo,idDominio,iFuente);


and removing the with (index(Buscador)) hint to see if the optimizer will use the index with the better estimates.



The main difference with the left join

The filtering is happening much sooner on the left join:



The estimates are higher



And due to the higher estimates the query is going parallel



Whereas on the inner join you are not using parallelism.

This and other considerations make the difference in execution time happen, fixing the estimates by adding option recompile or changing the table variables to temp tables would be the first thing to look into.