That is good. It checks both that the value is not nil and also that the value is defined with a key. Since if a key is missing and you do {{ page.bad_key }} then the value is nil
I’d go a step further and check the value is not empty. I use a CMS for some sites and if I don’t set a value it gets stored as a empty string, which is considered truthy by Jekyll (unlike in other programming languages).
So I would do. Assuming that say name is the minimum required field and that others like sell might or might be required.
{% if boat.name and boat.name != '' %}
{{ boat.name }} - {{ boat.sell }}
{% endif %}