la seconda con la WHERE puoi certamente farla,
è la "classica" soluzione
se non ti funziona ci deve essere qualcosa nella variabile



la prima invece direi che non si puo fare,
ma solo a titolo accademico e per arrampicarci sui vetri
se vogliamo mettere una variabile nelle JOIN allora
creando una VistaVirtuale ci avviciniamo
codice:
SELECT 
*
FROM 
prodotti 
INNER JOIN 
(
(SELECT DISTINCT $idPuntoV AS TuaVariabile FROM prodotti)  AS VistaVirtuale 
INNER JOIN 
disponibilita 
ON 
VistaVirtuale.TuaVariabile = disponibilita.idPuntoV
) 
ON 
prodotti.id = disponibilita.idProdotto
;
.