Вы используете правое соединение. В ваших тегах запроса идентификаторы являются базой, с которой MySQL начнет совпадать. Правое объединение оценивается справа налево. Если вы разбите свой запрос на две части. Первый будет:
select * from product_tag right join tag using (tag_id);
+--------+-----------+------------+
| tag_id | name | product_id |
+--------+-----------+------------+
| 1 | expensive | 1 |
| 1 | expensive | 2 |
| 2 | fast | 1 |
| 2 | fast | 3 |
| 3 | mean | 1 |
| 3 | mean | 3 |
| 4 | larg | 1 |
| 4 | larg | 2 |
| 5 | small | 3 |
| 6 | alive | 3 |
| 7 | blank tag | NULL |
+--------+-----------+------------+
Как видите, не существует product_id, совпадающего с пустым тегом. Объясняет, почему объединение этого результата с таблицей продуктов даст вам результат, который вы видели.
Если вместо этого вы используете левое соединение, вы получите такой результат:
select * from product_tag left join product using (product_id) left join tag using (tag_id);
+--------+------------+-------+-----------+
| tag_id | product_id | name | name |
+--------+------------+-------+-----------+
| 1 | 1 | car | expensive |
| 2 | 1 | car | fast |
| 3 | 1 | car | mean |
| 4 | 1 | car | larg |
| 1 | 2 | house | expensive |
| 4 | 2 | house | larg |
| 2 | 3 | cat | fast |
| 3 | 3 | cat | mean |
| 5 | 3 | cat | small |
| 6 | 3 | cat | alive |
+--------+------------+-------+-----------+