It will display the first one in the configuration for that IP/port if no hostname is provided (and hence no hostname will match). “If no matching ServerName or ServerAlias is found in the set of virtual hosts containing the most specific matching IP address and port combination, then the first listed virtual host that matches that will be used.”
SNI is the same, unless you use SSLstrictSNIVhostCheck. The first (default) vhost will be used for any request where the provided server name doesn't match another vhost. There is one directive related to using SNI with name-based virtual hosts, SSLStrictSNIVHostCheck, which controls whether to allow non SNI clients to access a name-based virtual host. http://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslstrictsnivhostcheck
If it’s a shared host with sites that may not appreciate seeing someone else’s site if loads by IP, I’d recommend making a blank virtualhost first for each namevirtualhost directive right below the namevirtualhost. One for ssl (with maybe the main server cert) and one for port 80. It will ensure that the blank host is displayed instead of the first of the real sites.