Java
while
JDBC
preparedStatement
ResultSet

Resultsetのnext()は、"ResultSetの次があるかどうかを判定するメソッド"ではない。

rs.next()について勘違いをしていたことが判明。

誰か同じような勘違いをしていたら・・・と思い、投稿します。

rs.next()の解釈について

rs.next()は"ResultSetの次があるかどうかだけを判定するメソッド"だと思っていたのですが、

さらに、"現在の位置から次の1行へ進んでカーソルを当てる"機能もあるようです。
 (詳細は、Oracleのページを確認ください。)

間違い.java
ResultSet rs = stmt.executeQuery(sql);

//結果がなければnullを返却する    
if(rs.next()){                       //←ここで結果の1行目にカーソルが当たっている
    return null;
}

//2.リストを生成する   
while (rs.next()) {                  // ←ここで結果の2行目にカーソルが当たっている
    list.add(rs.getString("name"));  // ←ここで結果び2行目のnameが取れている
}

上記ののようにコーディングしていました。
間違い.javaで生成したリストは、コマンドでSQL叩くより1行少ない!と小一時間悩んでいました・・・。
それもそのはずです。

whileで回す前に、結果の1行目にカーソルが当たってしまっているので、
whileで回そうとした時には、結果の2行目にカーソルが当たってしまい、
結果の1行目はリストに追加されていなかったのです。

正しいケース

参考までに、下記のようにすれば、結果が0件の場合の処理もかけるようです。

正解.java
ResultSet rs = stmt.executeQuery(sql);

//リストにデータを追加する
while (rs.next()) {
    list.add(rs.getString("フィールド名"));
}

//リストがからの場合、nullを返却する
if(list.isEmpty()){
    return null;
}

追記

一部ソースコード修正しました。saka1029さん、Kilisameさんご指摘ありがとうございます!