WHERE (user_id = 17 OR user_id IS NULL) AND name = "menu_items"
Y solo para limpiar el resto de la consulta:
El id
en las preferencias definidas no es necesario que esté allí, use una clave combinada de preference_id
y user_id
en su lugar.
Si el id
de preferences
fue nombrado preference_id
, el largo ON
declaración podría ser reemplazada con USING(preference_id)
El IF
la función se puede reemplazar con COALESCE(defined_value, default_value)