WHERE (user_id = 17 OR user_id IS NULL) AND name = "menu_items"
E solo per ripulire il resto della query:
Il id nelle preferenze definite non è necessario che ci sia, usa una chiave combinata di preference_id e user_id invece.
Se l'id di preferences è stato chiamato preference_id , il lungo ON l'istruzione potrebbe essere sostituita con USING(preference_id)
Il IF la funzione può essere sostituita con COALESCE(defined_value, default_value)