Well first off, you're not running a single query anyway since you're eager loading answers, so no need to worry about that. That out of the way, invert the logic, and fetch the answered question ids first, then use for a where not in clause..
Something like this:
$asked_ids = Result::where('user_id', Auth::user()->id)
->pluck('question_id');
$question = Question::with('answers')
->whereNotIn('id', $asked_ids)
->inRandomOrder()
->first();
Can't remember if you need to tack a ->toArray() on that first query or not before using it in a where[not]In clause.
But... that should grab you the first random question not yet asked to the authenticated user