Вы просто оставляете boat.id в подзапросе:
SELECT users.id as user_id, boats.id as boat_id
FROM users
CROSS JOIN boats
WHERE users.id NOT IN
(SELECT users.id as user_id
FROM users
LEFT JOIN rentals ON (users.id=rentals.user_id)
LEFT JOIN boats on (boats.id=rentals.boat_id)
WHERE users.id=rentals.user_id)
ORDER BY users.id
Тем не менее, нет причин добавлять LEFT JOIN к лодкам в подзапросе, поскольку он не используется. Кроме того, предложение WHERE в любом случае сводит на нет левое соединение с арендной платой, поэтому это можно упростить до:
SELECT users.id as user_id, boats.id as boat_id
FROM users
CROSS JOIN boats
WHERE not exists (
SELECT 1
FROM rentals
WHERE rentals.user_id = users.id
);
Я также немного скептически отношусь к тому, что вам нужно CROSS JOIN, но у меня недостаточно информации, чтобы точно определить, что вы хотите.