With OPTION RECOMPILE vs without OPTION RECOMPILE
With OPTION(RECOMPILE) optimiser knows the value of the @hid variable and essentially generates the plan, as if you wrote:

SELECT *
FROM H h
JOIN D d ON d.idH = h.id
WHERE h.id = 1


The generated plan has to be valid for this specific value of the parameter. It does not have to be valid for any other value of the parameter. Also, optimiser knows statistics of the table and usually can make a better decision. If there is only one value in the table that is equal to 1, most likely it will choose a seek. If there are a lot of values in the table that are equal to 1, it would choose a scan.

Without OPTION(RECOMPILE) optimiser has to generate a plan that is valid (produces correct results) for any possible value of the parameter. 

As you have observed, this may lead to different plans.

I would recommend to look at both actual execution plans in the free SQL Sentry Plan Explorer tool. Look at details of each operator in the plan and you should see what is going on. You can do it in SSMS as well, but Plan Explorer is much nicer.