You don't need an SQL statement at all. You can return a reference to a clone of the form's recordset by means of the RecordsetClone property.
You'll find an example in DatabaseBasics.zip in my public databases folder at:
https://onedrive.live.com/?cid=44CC60D7FEA42912&id=44CC60D7FEA42912!169
Note that if you are using an earlier version of Access you might find that the colour of some form objects such as buttons shows incorrectly and you will need to amend the form design accordingly.
If you have difficulty opening the link, copy the link (NB, not the link location) and paste it into your browser's address bar.
In the section on 'retrieving data from the database' in this little demo file you'll find a bound form in which a contact can be selected in an unbound combo box. The code in the control's AfterUpdate event procedure is as follows:
Dim ctrl As Control
Set ctrl = Me.ActiveControl
If ctrl = 0 Then
DoCmd.GoToRecord record:=acNewRec
Else
' find matching row in form's RecordsetClone
With Me.RecordsetClone
.FindFirst "ContactID = " & ctrl
If Not .NoMatch Then
'move form to selected record
' by synchronizing bookmarks
Me.Bookmark = .Bookmark
End If
End With
End If
The control's RowSource property is:
SELECT 0 AS ContactID,0 AS SortColumn,NULL AS LastName,
NULL AS FirstName,"<New Contact>"
FROM Contacts
UNION
SELECT ContactID,1,LastName,FirstName, Lastname & ", " & FirstName
FROM Contacts
ORDER BY SortColumn, Lastname,FirstName;
The first part of the UNION operation adds a <New Contact> item at the top of the combo box's list, to navigate to an empty new record. Note that the combo box's BoundColumn property references the hidden ContactID column. The concatenated
Lastname & ", " & FirstName column is the visible column by virtue of the ColumnWidths property being set to 0cm;0cm;0cm;0cm;8cm to hide the first four columns.